Aerial view of a man using computer laptop on wooden table
業務システムやファイル共有の自動化において、ネットワークドライブへのアクセスは非常に重要です。特にWindows環境では、ローカルドライブのように扱える「ネットワークドライブ」をC#で制御できると、業務の効率化が進みます。本記事では、C#からネットワークドライブへ接続・切断する方法を、サンプルコード付きでわかりやすく解説します。Active Directoryのある環境でも、個別認証が必要なケースでも対応可能です。
C#には直接ネットワークドライブを操作する標準APIはありませんが、Windowsのnet use
コマンドをProcess
クラスを使って実行することで、実現できます。
using System.Diagnostics;
public class NetworkDriveConnector
{
public static void MapNetworkDrive(string driveLetter, string networkPath, string username, string password)
{
string arguments = $@"use {driveLetter}: {networkPath} /user:{username} {password} /persistent:no";
ProcessStartInfo psi = new ProcessStartInfo("net", arguments)
{
CreateNoWindow = true,
UseShellExecute = false
};
using (Process p = Process.Start(psi))
{
p.WaitForExit();
}
}
}
この関数では、ドライブレター(例:Z:
)、接続先のネットワークパス(例:\\192.168.1.100\Share
)、ユーザー名とパスワードを渡すことでマッピングできます。
このエラーは、net use
コマンドに必要な権限がない場合や、入力が間違っているときに発生します。
対処法:
ネットワーク先がドメイン参加していないスタンドアロン機器の場合、以下のようにユーザー名を「PC名\ユーザー名」の形式で記述する必要があります。
csharpコピーする編集するMapNetworkDrive("Z", @"\\192.168.1.100\Share", @"PC-NAME\User", "password123");
Active Directory環境では、ドメイン名を付けてログインする場合もあります。
MapNetworkDrive("Z", @"\\server\Share", @"DOMAIN\User", "password123");
ドライブがすでにマッピングされているかどうかを確認してから処理を行いたい場合、以下のコードで確認可能です。
using System.IO;
public static bool IsDriveMapped(string driveLetter)
{
return Directory.Exists(driveLetter + @":\");
}
すでに接続されている場合はマッピング処理をスキップするなど、冗長な処理を避けるのに役立ちます。
接続を解除するには、同じくnet use
コマンドを使います。
public static void DisconnectNetworkDrive(string driveLetter)
{
string arguments = $@"use {driveLetter}: /delete /yes";
ProcessStartInfo psi = new ProcessStartInfo("net", arguments)
{
CreateNoWindow = true,
UseShellExecute = false
};
using (Process p = Process.Start(psi))
{
p.WaitForExit();
}
}
ファイル使用中のドライブは切断に失敗するため、使用状況に注意しましょう。
Windows FormsアプリケーションなどでGUIから入力を受け取りたい場合、以下のようにして接続処理を組み込むこともできます。
private void connectButton_Click(object sender, EventArgs e)
{
string driveLetter = driveComboBox.SelectedItem.ToString();
string path = pathTextBox.Text;
string user = userTextBox.Text;
string pass = passwordTextBox.Text;
NetworkDriveConnector.MapNetworkDrive(driveLetter, path, user, pass);
}
これにより、ユーザーが自由にドライブや接続先を選べる柔軟なアプリケーションになります。
/persistent:no
にすることで、ログオフ時にドライブが解除されます。自動接続したい場合はyes
にすることも可能です。C#からネットワークドライブへ接続するには、net use
コマンドを活用するのが最も手軽で確実な方法です。適切な権限と入力情報さえ整えば、スムーズにファイル共有・業務自動化が行えるようになります。この記事の内容をベースに、実業務の中でも安全で効率的なファイルアクセス環境を構築してください。