C#ディレクトリ内の画像ファイルを絞り込む

C# コンピュータ
C#

ディレクトリ内にある.jpgや.pngなど画像ファイルの拡張子をもつファイルを絞り込みたい。

// 
// ディレクトリ内の画像ファイルを絞り込む
// 

using System;
using System.Collections.Generic;
using System.Linq;

using System.Text.RegularExpressions;
using System.IO;

// コンパイル
// csc PicFileSearch.cs

class PicFileSearch {
    // エントリーポイント
    static void Main() {

        // 対象の画像ファイルの拡張子一覧
        var picExt = new List<string> {
            ".png",
            ".jpg",
            ".jpge",
            ".bmp",
            ".gif",
        };

        string targetDir = @"./img/";

        var d = Directory.EnumerateFiles(targetDir)
            .Where(x => picExt.Contains(Path.GetExtension(x).ToLower()));
        
        // 結果の表示
        Console.WriteLine("List<string>.Contains()");
        foreach (string f in d) {
            Console.WriteLine("{0}", f);
        }

        // 正規表現
        string pattern = @"\.(jp(e)?g|bmp|png|gif)$";

        var e = Directory.EnumerateFiles(targetDir)
            .Where(x => Regex.IsMat

.NETでファイルの一覧を取得する方法のうちの一つでSystem.IO.Directory.EnumerateFiles()を試してみました。
このメソッドの戻り値はIEnumerable<string>だったりするので、LINQを使った絞り込みやforeachすることが出来ます。また、同じIEnumerable<T>属のList<T>に変換することも容易です。LINQの場合、絞り込んだ後、項目を加工、並べ替えなどの処理をつなげるて記述することも出来ます。

Whereで絞り込みをさせたいのですが、拡張子が複数あり条件式が長くなりがちです。
絞り込みの条件にList.Contains()とRegex.IsMatch()を試してみました。

Regex.IsMatchで正規表現によるマッチングは、文字列の末尾とのマッチや大文字小文字の両方とマッチなど、通常の文字列操作数回分を1回の命令で表現することが出来ます。

List.Contains()を使った方法は、あまり使う場面は多くないかもしれませんが、絞り込む拡張子の種類が動的に変動するような場合使えるかもしれません。

コメント