複数条件のファイルの抽出
LINQを使うことで簡潔でした。LINQで書く必要はあんまりないかもしれませんが、まあ練習用です。二つのデータの集合を照合させるという意味としても直接的な気がしてます。
string path = @"C:\Windows\Temp";
string[] patterns = {".jpg",".pdf",".eps"};
string[] files = Directory.GetFiles(path, "*.*");
var ret = files.Where(file => patterns.Any(pattern => file.ToLower().EndsWith(pattern)));
一文で書けました。使ってるLINQメソッド
Where | 条件に当てはまるものを抽出 |
Any | いずれかが条件に当てはまるとtrueを返す |
ファイルが条件に適合するかどうかの判定は、下の文です。
file.ToLower().EndsWith(pattern)
この部分を変更することで、正規表現に対応したりいろいろできそうです。なお、patternsは適合率の高い拡張子を左に置くほうが、先に判定されるので処理効率がいいはずです。
サブフォルダ内のファイルも対象にする
おまけです。サブフォルダ内のファイルも対象にするには、DirectoryのGetFilesメソッドの引数にSearchOption.AllDirectoriesを指定してあげます。string[] files = Directory.GetFiles(path, "*.*",SearchOption.AllDirectories);
0 件のコメント :
コメントを投稿