1

我想对string []获得的文件名应用过滤器,Directory.GetFiles()而无需在 OpenFileDialog 中打开它。

有什么方法可以应用所有这些过滤器(我通常会应用到 OpenFileDialog),例如:

openFileDialog.Filter = "Bitmap Images (*.bmp)|*.bmp|" +
                          "JPEG Images (*.jpeg, *.jpg)|*.jpeg;*.jpg|" +
                          "PNG Images (*.png)|*.png|" + ...;

到字符串 []。

我基本上想从 FolderBrowserDialog 中选择 Folder 并从 Folder 中仅选择选定的文件 - 试图找到某种方法来静默执行此操作(将参数设置为 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 查询或类似的东西。?[我是新手 - 还是学习者]

任何帮助都感激不尽。提前致谢

4

3 回答 3

3

我不认为多次调用 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);
    }
}
于 2013-09-16T19:19:15.627 回答
2

未经测试,但应该可以工作

var formats = new string[]{"*.jpg","*.mp3"}
formats.SelectMany(format => Directory.EnumerateFiles(dirpath, 
                        format, SearchOption.AllDirectories)
       .ToArray();
于 2013-09-16T15:24:51.297 回答
0

我会看看下面的文章: http ://www.beansoftware.com/ASP.NET-FAQ/Multiple-Filters-Directory.GetFiles-Method.aspx

它基本上是 GetFiles 函数的包装器,它将采用与您提供给 OpenFolderDialog 的字符串非常相似的字符串,并将返回与模式匹配的文件的字符串数组 (string[])。(这只是一个递归的 Direectory.GetFiles)

例如:

getFiles(path, " .bmp| .jpg") 等。

于 2013-09-16T15:20:46.150 回答