Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SaveFileDialog阻止可移动驱动器_C#_.net_Windows - Fatal编程技术网

C# SaveFileDialog阻止可移动驱动器

C# SaveFileDialog阻止可移动驱动器,c#,.net,windows,C#,.net,Windows,我使用SaveFileDialog让用户在可移动驱动器上选择目录和文件名。 之后,我创建该文件,对其进行写入,然后再次关闭它 String oldDir = Directory.GetCurrentDirectory(); // ... do dialog... Environment.CurrentDirectory = oldDir; 到那时,文件本身没有被锁定(可编辑、可删除),但我无法弹出驱动器,因为windows声称它仍在使用中。我必须在弹出之前退出应用程序 String oldDi

我使用SaveFileDialog让用户在可移动驱动器上选择目录和文件名。 之后,我创建该文件,对其进行写入,然后再次关闭它

String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;
到那时,文件本身没有被锁定(可编辑、可删除),但我无法弹出驱动器,因为windows声称它仍在使用中。我必须在弹出之前退出应用程序

String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;
顺便说一句,即使我仅使用SaveFileDialog拾取文件,驱动器也会被锁定。在对话框中点击“取消”不会导致问题

SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = ".csv";
dlg.InitialDirectory = mySettings.defaultPath;
dlg.Filter = "(CSV-Dateien) *.csv|";
dlg.FileName = exportDate.ToString("yyyy-MM-dd") + ".csv";

if (dlg.ShowDialog() != DialogResult.OK){
    // USB-Drive is ejectable
}else{
    // USB-Drive is locked
}
String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;

我找到了两种解决方案:

String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;
一旦用户单击“保存”,该对话框将更改当前工作目录。阻止可移动驱动器的不是文件,而是程序本身

String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;
因此,您需要在完成后重新调整工作目录:

String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;
或者,您只需在调用ShowDialog()之前将文件对话框配置为还原目录

String oldDir = Directory.GetCurrentDirectory();
// ... do dialog...
Environment.CurrentDirectory = oldDir;