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

C# 获取特定扩展名为c的文件#,c#,directory,filesystems,getfiles,C#,Directory,Filesystems,Getfiles,我希望获得某个扩展名(递归)的所有文件的列表,但仅以该扩展名结尾的文件 例如,如果我有以下文件,我希望获得扩展名为“.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", Sea

我希望获得某个扩展名(递归)的所有文件的列表,但仅以该扩展名结尾的文件

例如,如果我有以下文件,我希望获得扩展名为“.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();
List theList=Directory.GetFiles(@“C:\SearchDir”、“*.exe”、SearchOption.AllDirectories).ToList();
但我得到的是以下三个文件的列表:
file1.exe、file2.txt.exe、file4.txt.exe1


有什么想法吗?

这是一个常见的问题。注意到:

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

您无法通过搜索
.exe
扩展名来解决此问题;您需要在客户端代码中再次筛选结果

现在,需要注意的一点是。以下示例实际上被视为可执行文件:

然而,从技术上讲,这个文件不能被视为可执行文件

那么问题就变成了,你想要什么算法?在我看来,您需要以下内容:

  • 扩展名为
    exe
    的文件
  • 没有多个扩展名的文件
看看艾哈迈德的答案,这是一种获得你想要的算法的奇妙方法。

试试这个:

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

应该
123.567.exe
匹配吗?非常感谢您的详细回复。我确实使用了艾哈迈德的方法,而且效果很好。请问源目录是什么
file4.txt.exe1
var exeFiles = Directory.EnumerateFiles(sourceDirectory, 
                                        "*", SearchOption.AllDirectories)
               .Where(s => s.EndsWith(".exe") && s.Count( c => c == '.') == 2)
               .ToList();