OpenFileDialog C# 自定义过滤器,例如 'ABC*.pdf'

Posted

技术标签:

【中文标题】OpenFileDialog C# 自定义过滤器,例如 \'ABC*.pdf\'【英文标题】:OpenFileDialog C# custom filter like 'ABC*.pdf'OpenFileDialog C# 自定义过滤器,例如 'ABC*.pdf' 【发布时间】:2013-11-20 09:21:50 【问题描述】:

是否可以指定像 'ABC*.pdf' 这样的自定义过滤器,这意味着:“显示所有以 ABC 开头的 PDF”?

我只能指定*.pdf*.doc*.*

谢谢 弗洛里安

【问题讨论】:

不幸的是,这是不可能的。但你可以创建自己的FileDialog 单独使用Filter属性是不行的,但是基本上可以通过使用FileName属性,在里面输入ABC*来达到这个效果。 【参考方案1】:

更新

在意识到以下内容会更好之后,稍微改变了我的解决方案:

这不是一个完整的“硬过滤器”,但使用 FileName 属性应该仍然可以满足您的需求:

using System;
using System.Windows.Forms;

namespace TestingFileOpenDialog

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        private void button1_Click(object sender, EventArgs e)
        
            this.openFileDialog1.FileName = "pro*";
            this.openFileDialog1.Filter = "Pdf Files|*.pdf";
            this.openFileDialog1.ShowDialog();
        
    

我想这可能取决于您使用的操作系统,但它确实适用于我的情况,在 Windows 8 上。

我也意识到这不会“永久”过滤掉所有不相关的文件,但它至少提供了一个初始过滤器。

结果:文件名字段中没有 pro*,这将显示其他几个 PDF 文件

【讨论】:

+1 是的,它在 Windows 7 中为我工作。我认为这正是 OP 正在寻找的。​​span> 绝对是实现这一目标的一种方式。但可以完全按照 .NET 5.0 中预期的 OP 进行操作(我不知道从哪个版本开始)。【参考方案2】:

是和不是。

:查看MSDN,页面。过滤器不是那样使用的。它仅适用于扩展。

:您可以编写自己的类来扩展/模仿 OpenFileDialog,使用一些正则表达式来执行您想要的操作,然后简单地针对当前文件夹中的所有文件运行该匹配项(可能做一些工作,但如果你真的很想要它,那就去做吧:))

【讨论】:

谢谢,我认为只有一个带有过滤文件的 ListBox 对我来说是最好和最快的解决方案 那么你去...问题解决了。将您最喜欢的答案标记为答案,然后回到编码我猜:)【参考方案3】:

正如我在评论中所说:

很遗憾,这是不可能的。但是你可以创建自己的 FileDialog

要创建自己的 FileDialog,可以使用以下方法:

  string[] Directories = Directory.GetDirectories(Path);
  string[] Files = Directory.GetFiles(Path);

现在根据您的要求过滤Files-Array:

List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));

要获取文件Icons,必须使用Shell32.dll的DLLImport

[DllImport("shell32.dll")]

SO question 中提供的代码应该可以解决问题。

可以在这里找到实现我兄弟编写的自己的 FileDialogs 的项目: Download project

简而言之,这应该可以解决问题:

foreach (string file in Directory.GetFiles(Path)
                                 .Where(x => new DirectoryInfo(x).Name.StartsWith("ABC")))

    //Add the string to your ListView/ListBox/...

【讨论】:

请注意,此答案中链接到的网站已被感染。【参考方案4】:

答案很简单:

您可以将过滤器设置为仅允许具有属性Filter 的特定文件类型,如下所示:

fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

但过滤文件名是NOT 可能的。

在这种情况下,您可以创建自己的自定义 OpenFIleDialog

查看此链接了解更多信息:How to create customized open file dialog in C#

【讨论】:

使用 Java 中的 FileChooser 是可能的,所以我认为 C# 中也有办法 FileChooser 由 Java 渲染,OpenFileDialog 由 Win32 渲染,后者不支持【参考方案5】:

我再次检查了它,似乎对于 .NET 5.0 它的工作方式与 OP 预期的一样。

var fileSelector = new OpenFileDialog()

  Filter = "ABC Files|abc*.pdf";  
;

这样,FileDialog 将只显示以“abc”开头的 .pdf 文件。

【讨论】:

【参考方案6】:

使用这个:

Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf

【讨论】:

明明这是原贴的第一次尝试,还是不行。

以上是关于OpenFileDialog C# 自定义过滤器,例如 'ABC*.pdf'的主要内容,如果未能解决你的问题,请参考以下文章

C# - 如何在 OpenFileDialog 中允许多种文件类型?

C# 文件过滤器filter

c# winform 如何实现选择另一台电脑上目录下的文件??

c#中openfiledialog打开文件的问题

C# 如何处理 OpenFileDialog 文件

C#中SaveFileDialog 和OpenFileDialog 的用法