是否可以指定自定义过滤器'ABC*.pdf'
,例如:“显示所有以 ABC 开头的 PDF ”?
我只能指定*.pdf
, *.doc
,*.*
等。
谢谢弗洛里安
是否可以指定自定义过滤器'ABC*.pdf'
,例如:“显示所有以 ABC 开头的 PDF ”?
我只能指定*.pdf
, *.doc
,*.*
等。
谢谢弗洛里安
更新
在意识到以下内容会更好后,稍微改变了我的解决方案:
这不是一个完整的“硬过滤器”,但使用该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 文件)。
是和不是。
否:查看MSDN页面。过滤器不是那样使用的。它仅适用于扩展。
是的:您可以编写自己的类来扩展/模仿 OpenFileDialog,使用一些正则表达式来执行您想要的操作,然后简单地针对当前文件夹中的所有文件运行该匹配项(可能需要一些工作,但如果您真的想要它太糟糕了,去吧:))
正如我在评论中所说:
不幸的是,这是不可能的。但是您可以创建自己的 FileDialog
要创建自己的 FileDialog,可以使用以下方法:
string[] Directories = Directory.GetDirectories(Path);
string[] Files = Directory.GetFiles(Path);
现在Files
根据您的规格过滤 -Array:
List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));
要获取文件图标,您必须使用DLLImport
Shell32.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/...
}
答案很直接:NO
您可以将过滤器设置为仅允许具有以下属性的特定文件类型Filter
:
fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
但过滤文件名是NOT
可能的。
在这种情况下,您可以创建自己的自定义OpenFIleDialog
。
有关更多信息,请参阅此链接:如何在 C# 中创建自定义的打开文件对话框
我再次检查了它,似乎对于 .NET 5.0 它的工作方式与 OP 预期的一样。
var fileSelector = new OpenFileDialog()
{
Filter = "ABC Files|abc*.pdf";
};
这样,FileDialog 将只显示以“abc”开头的 .pdf 文件。
用这个:
Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf