如何在C#中限制OpenFileDialog中的文件名修改

时间:2012-12-07 22:46:15

标签: c# openfiledialog

我有一个C#.NET 3.5程序,它使用OpenFileDialog来检索要导入的文件。它有两个过滤器(*Domain*.**.*),*Domain*.*被选为FilterIndex。我在OpenFileDialog内修改过滤器中的文件时发现了一个消失的案例。

以下是用户重现问题的步骤:

  1. 在程序中,打开OpenFileDialog。确保过滤器设置为*Domain*.*
  2. 在目录中查找与过滤器匹配的文件,并更改文件名,使其不再与过滤器匹配。 注意:文件将消失。
  3. 更改过滤器以显示所有文件*.*注意:即使您显示*.*,也不会列出该文件。
  4. 此时,您可以在Windows资源管理器中打开该文件夹,并查看具有更改名称的文件是否存在。但是,在OpenFileDialog中,无论使用哪种过滤器,它都不再可见。再次查看该文件的唯一方法是关闭OpenFileDialog,然后重新打开它。

    以下是我创建OpenFileDialog的代码。

    using(OpenFileDialog domainFileDialog = new OpenFileDialog())
    {
        domainFileDialog.CheckFileExists = true;
        domainFileDialog.CheckPathExists = true;
        domainFileDialog.Filter = "Domain Files (*Domain*.*)|*Domain*.*|All files (*.*)|*.*";
        domainFileDialog.FilterIndex = 1;
        domainFileDialog.Multiselect = false;
        domainFileDialog.RestoreDirectory = true;
        domainFileDialog.ShowReadOnly = true;
        domainFileDialog.SupportMultiDottedExtensions = true;
        domainFileDialog.Title = "Choose the Domain File to Import...";
        domainFileDialog.ValidateNames = true;
    
        \\ Perform Import functionality...
    }
    

    似乎当您打开OpenFileDialog并修改与限制性更强的过滤器匹配的现有文件以使其不再与过滤器匹配时,即使所有文件*.*,文件也会从可见性中消失显示。

    由于我不知道为什么会发生这种情况,(并且我愿意接受有关如何修复它的建议)是否有任何方法可以限制用户创建或修改{{1}中的任何文件希望能防止这个问题?

2 个答案:

答案 0 :(得分:1)

首先,我建议你考虑是否值得关心用户可能会这样做。如果FOD这样做,每个Windows应用程序都有此功能,但您没有听到用户抱怨它。那真的是一个需要修复的问题吗?

如果问题与过滤器不仅仅是文件扩展名相关,那就不会让我感到惊讶 - 这样做是非常不寻常的。也许只尝试使用扩展名,看看是否是原因。

您是否尝试过按F5刷新其缓存数据?我不知道这是否会像在浏览器窗口中那样在FOD中起作用,但尝试一下可能会很有趣。

说了这么多,过滤按键(F2)和鼠标点击(右键))(用一些你可以从中得到的形式,或者你可以放入MessageFilter)来制作它是微不足道的用户无法访问任何允许他们重命名FOD文件的UI。如果你以这种方式打破了FOD,它会让我感到沮丧,但是在极少数情况下,重命名的文件“消失”的程度远远超过了。

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/microsoft.win32.openfiledialog.aspx

OpenFileDialog本身不支持任何此类功能。我认为此时最好的选择是编写自己的打开文件对话框窗口。你可以通过这种方式获得大量控制权并且不会花太长时间。