ネットワークドライブにファイルを書き込もうとすると、そのドライブは切断されますが、エラーが発生します。切断されたネットワークドライブの再接続
エクスプローラでドライブをダブルクリックすると、ネットワークドライブが再接続されます。
System.Io.Driveinfo.IsReadyを使用するドライブの準備が整っているかどうかを確認できますが、コードでどのように再接続できますか?
ネットワークドライブにファイルを書き込もうとすると、そのドライブは切断されますが、エラーが発生します。切断されたネットワークドライブの再接続
エクスプローラでドライブをダブルクリックすると、ネットワークドライブが再接続されます。
System.Io.Driveinfo.IsReadyを使用するドライブの準備が整っているかどうかを確認できますが、コードでどのように再接続できますか?
このcodeは、ドライブをマップし、実行時に動的にマップ解除する方法を示しますか?これはCodeGuruにあります。
@AndresRohrAtlasInformatikが指摘したように、受け入れられた解決策はWindows Vista以降では機能しません。
私の解決策は、単にエクスプローラを隠しウィンドウとして起動し、ネットワークドライブに移動してエクスプローラを閉じることです。後者は、エクスプローラが複数のウィンドウに対して非常に特殊な動作をするため、少し難しくなります(here参照)。
ProcessStartInfo info = new ProcessStartInfo("explorer.exe", myDriveLetter);
info.WindowStyle = ProcessWindowStyle.Hidden;
Process process = new Process();
process.StartInfo = info;
process.Start();
Thread.Sleep(1000);
//bool res = process.CloseMainWindow(); // doesn't work for explorer !!
//process.Close();
//process.WaitForExit(5000);
// https://stackoverflow.com/a/47574704/2925238
ShellWindows _shellWindows = new SHDocVw.ShellWindows();
string processType;
foreach (InternetExplorer ie in _shellWindows)
{
//this parses the name of the process
processType = System.IO.Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
//this could also be used for IE windows with processType of "iexplore"
if (processType.Equals("explorer") && ie.LocationURL.Contains(myDriveLetter))
{
ie.Quit();
}
}
このコードはWindows Vistaからはもう機能しません。 – AndresRohrAtlasInformatik