c# - 将文件过滤器应用于文件名的字符串 [],而不打开 OpenFileDialog

标签 c# string linq filter openfiledialog

我想对从 Directory.GetFiles() 获取的文件名的 string [] 应用过滤器,而不用在 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 查询? [我是新手 - 还是学习者]

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

最佳答案

我不认为多次调用 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);
    }
}

关于c# - 将文件过滤器应用于文件名的字符串 [],而不打开 OpenFileDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831497/

相关文章:

c# - 未知服务器标记 'rsweb:ReportViewer'

Python bz2 - 文本与交互式控制台(数据流)

java - 从字符串末尾剪切 <br/>-标签

c# - LINQ 在自定义类型列表中选择?

c# - 如何在使用 Host.CreateDefaultBuilder 装载的 Web 主机中配置日志记录

c# - 未经授权的访问异常 : how to wait on input from user. Windows Phone c#

ruby - 最后拆分和修改

c# - 为什么这个 LINQ 查询没有按预期工作?

entity-framework - 将Linq.Contains方法添加到表达式Func <Object,Bool>

c# - AvalonDock(2.0) + MVVM + VSPackage = 文档选择麻烦?