c# - SaveFileDialog 阻止可移动驱动器

标签 c# .net windows

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

此时文件本身未被锁定(可编辑、可删除),但我无法弹出驱动器,因为 Windows 声称它仍在使用中。我必须在弹出之前退出应用程序。

顺便说一句,即使我只使用 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
}

最佳答案

我找到了 2 个解决方案:

一旦用户单击“保存”,对话框就会更改当前工作目录。阻止可移动驱动器的不是文件,而是程序本身。

所以你要么需要在完成后重新调整工作目录:

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

或者您只需将文件对话框配置为在调用 ShowDialog() 之前恢复目录

dlg.RestoreDirectory = true;
dlg.ShowDialog()

关于c# - SaveFileDialog 阻止可移动驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/451340/

相关文章:

c# - 为什么返回 Task<int> 而不是 int? (异步和等待)

.net - 通过身份验证自动从网站下载图片

c++ - Windows,打开原始磁盘

c# - DDD : guidance on updating multiple properties of entities

c# - Unity 中的鼠标悬停

c# - 如何在标签中显示 GMT 日期和时间而不是本地时间

c# - MVC3 中的 Ninject 依赖注入(inject) - 在 Controller 之外

c++ - .Net DLL 与 C++ DLL

windows - wxMSW设置窗口左上角图标

windows - 为什么我不能在 Windows 上使用 TortoiseMerge 作为我的 git merge 工具?