17

是否可以指定自定义过滤器'ABC*.pdf',例如:“显示所有以 ABC 开头的 PDF ”?

我只能指定*.pdf, *.doc,*.*等。

谢谢弗洛里安

4

6 回答 6

36

更新

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

这不是一个完整的“硬过滤器”,但使用该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 文件)。

在此处输入图像描述

于 2013-11-08T11:38:26.750 回答
3

是和不是。

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

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

于 2013-11-08T11:24:08.630 回答
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"));

要获取文件图标,您必须使用DLLImportShell32.dll:

[DllImport("shell32.dll")]

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

一个实现了我哥自己写的FileDialogs的项目可以在这里找到: 下载项目

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

foreach (string file in Directory.GetFiles(Path)
                                 .Where(x => new DirectoryInfo(x).Name.StartsWith("ABC")))
{
    //Add the string to your ListView/ListBox/...
}
于 2013-11-08T11:26:52.347 回答
0

答案很直接:NO

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

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

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

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

有关更多信息,请参阅此链接:如何在 C# 中创建自定义的打开文件对话框

于 2013-11-08T11:23:56.583 回答
0

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

var fileSelector = new OpenFileDialog()
{
  Filter = "ABC Files|abc*.pdf";  
};

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

于 2022-02-03T10:54:49.963 回答
-2

用这个:

Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf
于 2013-11-08T11:31:35.553 回答