获取特定扩展名的文件 c#

3
我希望能够获取特定扩展名的所有文件列表(递归),但仅限于以该扩展名结尾的文件。
例如,我希望获取所有扩展名为".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。有什么想法吗?

123.567.exe 应该匹配吗? - Ahmed KRAIEM
2个回答

4

试试这个:

var exeFiles = Directory.EnumerateFiles(sourceDirectory, 
                                        "*", SearchOption.AllDirectories)
               .Where(s => s.EndsWith(".exe") && s.Count( c => c == '.') == 2)
               .ToList();

请问源目录在哪里? - Joel Abraham

3
这是一个常见问题。请注意MSDN文档

在搜索模式中使用星号通配符字符(例如“*.txt”)时,当扩展名恰好为三个字符时,匹配行为与扩展名长于或短于三个字符时不同。具有恰好三个字符的文件扩展名的搜索模式返回具有三个或更多字符的扩展名的文件,其中前三个字符与搜索模式中指定的文件扩展名相匹配。

你不能通过搜索.exe扩展名来解决这个问题;你需要在客户端代码中再次过滤结果。

还有一件事要注意。以下示例实际上也被认为是可执行文件:

file1.exe
file2.txt.exe

尽管这个文件从技术上来说不能被视为一个可执行文件

file4.txt.exe1

所以问题变成了,你想要哪种算法?我认为你想要以下内容:
- 具有扩展名 exe 的文件。 - 没有“多个”扩展名的文件。
请查看Ahmed的答案,以获取您想要的算法的绝妙方法。

1
非常感谢您详细的回复。我确实使用了Ahmed的方法,它非常有效。 - Idanis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接