これを試して:
var exeFiles = Directory.EnumerateFiles(sourceDirectory,
"*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".exe") && s.Count( c => c == '.') == 2)
.ToList();
質問
特定の拡張機能(再帰)のすべてのファイルのリストを取得したいと思いますが それだけ その拡張機能で終わるファイル。
たとえば、次のファイルがある場合は、「.exe」拡張機能を備えたすべてのファイルを取得したいと考えています。
file1.exe、file2.txt.exe、file3.exe.txt、file4.txt.exe1、file5.txt
1つのファイルのリストを取得することを期待しています。 file1.exe
.
次の行を使用しようとしています。
List<string> theList = Directory.GetFiles(@"C:\SearchDir", "*.exe", SearchOption.AllDirectories).ToList();
しかし、私が得るのは、次の3つのファイルのリストです。 file1.exe , file2.txt.exe , file4.txt.exe1
何か案は?
解決 2
これを試して:
var exeFiles = Directory.EnumerateFiles(sourceDirectory,
"*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".exe") && s.Count( c => c == '.') == 2)
.ToList();
他のヒント
これは一般的な問題です。に注意してください MSDNドキュメント:
「*.txt」などのSearchPatternでAsterisk WildCard文字を使用する場合、拡張機能が正確に3文字の場合の一致する動作は、拡張機能が3文字を超えている場合とは異なります。 正確に3文字のファイル拡張子を持つsearchpattern の拡張機能を持つファイルを返します 最初の3文字がSearchPatternで指定されたファイル拡張子と一致する3つ以上の文字。
検索して解決することはできません .exe
拡大;クライアントコードでもう1回結果をフィルタリングする必要があります。
今、注意すべきことの1つはこれです。実際、次の例を考慮します 実行可能 ファイル:
file1.exe
file2.txt.exe
一方、これは技術的には見なされません 実行可能 ファイル。
file4.txt.exe1
それで、質問は、どのアルゴリズムが欲しいですか?私にはあなたが次のことを望んでいるように見えます:
exe
.あなたが望むアルゴリズムを取得するための素晴らしいアプローチについては、アーメドの答えを見てください。