我希望获得某个扩展程序(递归)的所有文件的列表,但仅以该扩展名结尾的文件。
例如,我希望获得所有带有“.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();
但我得到的是以下三个文件的列表:file1.exe , file2.txt.exe , file4.txt.exe1
有什么想法吗?
答案 0 :(得分:4)
这是一个常见的问题。请注意MSDN documentation:
在searchPattern中使用星号通配符时,例如&#34; * .txt&#34;,当扩展名正好是三个字符长时的匹配行为与扩展名多于或少于三个字符时的匹配行为不同长。 文件扩展名为三个字符的searchPattern会返回扩展名为三个或更多字符的文件,其中前三个字符与searchPattern中指定的文件扩展名匹配。 < / p>
您无法通过搜索.exe
扩展程序来解决此问题;您需要在客户端代码中再次过滤结果。
现在,有一点需要注意的是这一点。以下示例实际上将被视为可执行文件:
file1.exe
file2.txt.exe
然而,从技术上讲,这不会被视为可执行文件。
file4.txt.exe1
那么问题就变成了,你想要什么算法?在我看来,你想要以下内容:
exe
。看看艾哈迈德的答案,找到获得所需算法的绝佳方法。
答案 1 :(得分:2)
试试这个:
var exeFiles = Directory.EnumerateFiles(sourceDirectory,
"*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".exe") && s.Count( c => c == '.') == 2)
.ToList();