C#でネットワークドライブに接続する方法|マッピング・認証・切断まで徹底解説

業務システムやファイル共有の自動化において、ネットワークドライブへのアクセスは非常に重要です。特にWindows環境では、ローカルドライブのように扱える「ネットワークドライブ」をC#で制御できると、業務の効率化が進みます。本記事では、C#からネットワークドライブへ接続・切断する方法を、サンプルコード付きでわかりやすく解説します。Active Directoryのある環境でも、個別認証が必要なケースでも対応可能です。


C#でネットワークドライブに接続する基本的な方法

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)、ユーザー名とパスワードを渡すことでマッピングできます。


実行時に起こり得るエラーとその対処法

エラー例1:System.ComponentModel.Win32Exception

このエラーは、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();
}
}

ファイル使用中のドライブは切断に失敗するため、使用状況に注意しましょう。


C#でGUIからネットワークドライブを選択して接続する応用例

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);
}

これにより、ユーザーが自由にドライブや接続先を選べる柔軟なアプリケーションになります。


ネットワークドライブ操作の注意点

  1. セキュリティポリシー:社内ポリシーによっては、スクリプトからのネットワーク接続が禁止されていることもあるため、管理者と相談が必要です。
  2. 永続化/persistent:noにすることで、ログオフ時にドライブが解除されます。自動接続したい場合はyesにすることも可能です。
  3. ログ取得:トラブル時に備えて、ログファイルにコマンドの実行結果を記録しておくと安全です。

まとめ

C#からネットワークドライブへ接続するには、net useコマンドを活用するのが最も手軽で確実な方法です。適切な権限と入力情報さえ整えば、スムーズにファイル共有・業務自動化が行えるようになります。この記事の内容をベースに、実業務の中でも安全で効率的なファイルアクセス環境を構築してください。

タイトルとURLをコピーしました