我们的用户有时会使用不允许删除文件的目录。 (文件系统权限删除和删除子文件夹和文件均被拒绝)。我们使用System.Windows.Forms.SaveFileDialog来允许用户选择目录并提供文件名来保存他们的数据。
如果用户浏览没有删除权限的目录,则在按SaveFileDialog的Save按钮时会收到以下错误消息:
您无权修改此网络位置中的文件。 根据权限与管理员联系以进行这些更改。
除了此不需要的消息之外,当用户在对话框中按下“取消”时,具有用户指定名称的零长度文件将留在目录中。
这一切都发生了,因为默认情况下,SaveFileDialog通过在其中创建零长度文件来探测目录。探测完成后,删除临时文件。在我们的情况下,它无法删除(因为文件系统不允许删除),并且对话框认为整个探测失败,并向用户显示错误消息。
关闭此目录验证步骤的最简单方法是什么?我知道可以使用SaveFileDialog的属性(即CheckFileExist属性)关闭导致消息的其他标准检查,但似乎不是这个。
答案 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标志。