使SaveFileDialog不在用户选择的目录中创建测试文件

时间:2014-04-16 21:37:38

标签: c# savefiledialog

我们的用户有时会使用不允许删除文件的目录。 (文件系统权限删除删除子文件夹和文件均被拒绝)。我们使用System.Windows.Forms.SaveFileDialog来允许用户选择目录并提供文件名来保存他们的数据。

如果用户浏览没有删除权限的目录,则在按SaveFileDialog的Save按钮时会收到以下错误消息:

  

您无权修改此网络位置中的文件。   根据权限与管理员联系以进行这些更改。

除了此不需要的消息之外,当用户在对话框中按下“取消”时,具有用户指定名称的零长度文件将留在目录中。

这一切都发生了,因为默认情况下,SaveFileDialog通过在其中创建零长度文件来探测目录。探测完成后,删除临时文件。在我们的情况下,它无法删除(因为文件系统不允许删除),并且对话框认为整个探测失败,并向用户显示错误消息。

关闭此目录验证步骤的最简单方法是什么?我知道可以使用SaveFileDialog的属性(即CheckFileExist属性)关闭导致消息的其他标准检查,但似乎不是这个。

3 个答案:

答案 0 :(得分:0)

在显示对话框之前,将对话框的SaveFileDialog.InitialDirectory属性设置为您知道用户具有写入权限的目录的值。

答案 1 :(得分:0)

尝试处理SaveFileDialog.FileOK事件。它有CancelEventArgs作为第二个参数,因此您可以验证是否可以删除所需的目录,如果没有则设置e.Cancel = true
示例代码:

using (SaveFileDialog dlg = new SaveFileDialog())
{
    dlg.FileOk += (sender, e) => e.Cancel = !DirectoryIsGood(dlg.FileName);
    dlg.ShowDialog(this);
}

请注意,您需要创建DirectoryIsGood(filename)方法,该方法应按给定的filename检查目录。
我不确定在SaveFileDialog内部检查之前是否触发了此事件,但您尝试是有意义的。也许它会有所帮助。

答案 2 :(得分:0)

默认情况下,对话框会创建一个零长度测试文件,以确定是否可以在所选目录中创建新文件。要阻止创建此测试文件,请设置OFN_NOTESTFILECREATE标志。