是否可以指定自定义过滤器,例如'ABC * .pdf',这意味着:“显示所有以ABC开头的PDF”?
我只能指定* .pdf,* .doc,。等。
由于 弗洛里安
答案 0 :(得分:25)
已更新
在意识到以下情况会更好之后,稍微改变了我的解决方案。这不是一个完整的“硬过滤器”,但是使用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中它确实可以用于我的操作。
我也意识到这不会“永久”过滤掉所有无关文件,但它至少提供了一个初始过滤器。
<强>结果:强>
在FileName字段中没有pro*
,这将显示其他几个PDF文件。
答案 1 :(得分:3)
是和否。
否:请查看MSDN页面。过滤器不是那样使用的。它仅用于扩展。
是:您可以编写自己的类来扩展/模仿OpenFileDialog,使用一些正则表达式来执行您想要的操作,并且只需对当前文件夹中的所有文件运行该匹配(可能做一些工作,但如果你真的想要它那么糟糕,那就去吧:))
答案 2 :(得分:3)
如我的评论中所述:
不幸的是,这是不可能的。但是你可以创建自己的FileDialog
要创建自己的FileDialog,可以使用以下方法:
string[] Directories = Directory.GetDirectories(Path);
string[] Files = Directory.GetFiles(Path);
现在根据您的规范过滤Files
- 数组:
List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));
要获取文件图标,您必须使用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/...
}
答案 3 :(得分:0)
答案是直截了当的:否
您可以将过滤器设置为仅允许具有属性Filter
的特定文件类型:
fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
但过滤文件名NOT
可能。
在这种情况下,您可以创建自己的自定义OpenFIleDialog
。
有关详细信息,请参阅此链接:How to create customized open file dialog in C#
答案 4 :(得分:-2)
使用此:
Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf