将文件过滤器应用于文件名的字符串[],而无需打开OpenFileDialog

时间:2013-09-16 15:14:34

标签: c# string linq filter openfiledialog

我想对string []的{​​{1}}文件名进行过滤,而不是在OpenFileDialog中打开它。

有什么方法可以应用所有这些过滤器(我通常会应用于OpenFileDialog) e.g:

Directory.GetFiles()

到字符串[]。

我基本上想从FolderBrowserDialog中选择Folder并从文件夹中只选择所选文件 - 试图找到某种方式静默地执行此操作(将参数设置为OpenFileDialog但不打开它)。

我刚刚尝试了以下内容:

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

任何人都可以帮我找到解决方案。 有没有办法静默调用OpenFiledDialog?或者是否会有任何LINQ查询此问题或其他任何内容。 [我是新手 - 还是学习者]

任何帮助将不胜感激。 提前致谢

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:2)

未经测试但应该正常工作

var formats = new string[]{"*.jpg","*.mp3"}
formats.SelectMany(format => Directory.EnumerateFiles(dirpath, 
                        format, SearchOption.AllDirectories)
       .ToArray();

答案 2 :(得分:0)

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

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

E.g:

getFiles(路径,“ .bmp | .jpg”)等。