1

OpenFileDialog で開かずにstring []取得した FileNames にフィルターを適用したいと考えています。Directory.GetFiles()

これらすべてのフィルターを適用する方法はありますか (通常は OpenFileDialog に適用します)。

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

文字列 [] に。

私は基本的にFolderBrowserDialogからFolderを選択し、Folderから選択したファイルのみを選択したいと考えています.

私はちょうど次のことを試しました.:

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 に答える