将文件过滤器应用于文件名的字符串 [] ,而无需打开 OpenFileDialog
本文关键字:OpenFileDialog 过滤器 文件 应用于 文件名 字符串 | 更新日期: 2023-09-27 18:31:39
我想对我从Directory.GetFiles()
获得的string []
文件名应用过滤器,而无需在OpenFileDialog中打开它。
有什么方法可以应用所有这些过滤器(我通常会应用于OpenFileDialog)例如:
openFileDialog.Filter = "Bitmap Images (*.bmp)|*.bmp|" +
"JPEG Images (*.jpeg, *.jpg)|*.jpeg;*.jpg|" +
"PNG Images (*.png)|*.png|" + ...;
到字符串 []。
我基本上想从文件夹浏览器对话框中选择文件夹,并仅从文件夹中选择选定的文件 - 正在尝试找到某种静默执行此操作的方法(将参数设置为 OpenFileDialog 但不打开它)。
我刚刚尝试了以下方法.:
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = folderdialog.SelectedPath; // here I get my folder path
openFileDialog.Filter = "Bitmap Images (*.bmp)|*.bmp|" +
"JPEG Images (*.jpeg, *.jpg)|*.jpeg;*.jpg|" +
"PNG Images (*.png)|*.png";
string [] fnms = openFileDialog.FileNames; // I wished this string arry to get poplulated with filtered file list - but doh! Obviously it didn't.
谁能帮我找到解决这个问题的方法。有没有办法静默地调用OpenFiledDialog?或者是否会对此问题进行任何 LINQ 查询或类似的东西。?[我是一个新手 - 但学习者]
任何帮助将不胜感激。提前致谢
我不认为多次调用Directory.GetFiles是一个好主意,因为它是一个IO操作。我建议您执行以下操作:
static string[] GetFiles(string directory, params string[] extensions)
{
var allowed = new HashSet<string>(extensions, StringComparer.CurrentCultureIgnoreCase);
return Directory.GetFiles(directory)
.Where(f => allowed.Contains(Path.GetExtension(f)))
.ToArray();
}
static void Main(string[] args)
{
string[] files = GetFiles(@"D:'My Documents", ".TXT", ".docx");
foreach(var file in files)
{
Console.WriteLine(file);
}
}
未经测试,但应该可以工作
var formats = new string[]{"*.jpg","*.mp3"}
formats.SelectMany(format => Directory.EnumerateFiles(dirpath,
format, SearchOption.AllDirectories)
.ToArray();
我会看看下面的文章:http://www.beansoftware.com/ASP.NET-FAQ/Multiple-Filters-Directory.GetFiles-Method.aspx
它基本上是 GetFiles 函数的包装器,它将采用一个与您提供给 OpenFolderDialog 的字符串非常相似的字符串,并将返回与模式匹配的文件的字符串数组(string[])。(这只是一个递归的Direectory.GetFiles)
例如:
getFiles(path, ".bmp|.JPG")等。