C# - Microsoft.Win32.SaveFileDialog文件名问题

时间:2016-01-26 16:26:49

标签: c#

我遇到一个问题,如果您将对话框中的文件名设置为您设置的初始目录中的子目录,然后单击“保存”,对话窗口实际上并不存在保存文件,但打开我仍然可以与之交互的子目录。

例如,如果我将对话框的初始目录设置为' C:\ MainDir'并且该目录由SubDir1,SubDir2组成,然后在保存文件对话框中,我可以看到我在具有两个子目录的初始目录中。如果我在对话框中将文件名设置为SubDir1(无扩展名),然后我点击“保存”,则会发生什么,而不是将文件保存为' filename.extension'该对话框打开文件名指定的目录。

以下是我目前所拥有的内容:

SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = ext;
dlg.AddExtension = true;
dlg.FileName = filename;
dlg.Filter = filter;
dlg.FileOk += OnFileDialogOk;
dlg.InitialDirectory = dir;
bool? dlgRes = dlg.ShowDialog();

这是否可以轻松修复?

2 个答案:

答案 0 :(得分:5)

快速回答:否。

您无法覆盖Windows操作系统的默认保存方法。

您可以做的是验证您要使用的文件名(在本例中为SubDir)是否已作为目录存在。如果是,那么您需要更改该名称,因为这只会显示您已经看过的行为。

备注:想象一下,您有一个非常重要的文件夹,其中包含关键文件,而Windows可以让您保存以该目录命名的文件。这是一场等待发生的灾难。

答案 1 :(得分:1)

我能想到这样做的唯一方法有点极端:

  • 您可以滚动自己的对话框
  • 您可以修改标准对话框的功能

这里找到答案:Customizing OpenFileDialog可以帮助解决这个问题。

我想我还应该注意,虽然容纳这种输入并自动附加扩展名似乎有帮助,但对于许多期望默认行为的用户来说,这是违反直觉的。

简而言之,我可能会三思而后行。