获取某些扩展名的文件c#

时间:2013-11-07 12:46:53

标签: 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", SearchOption.AllDirectories).ToList();

但我得到的是以下三个文件的列表:file1.exe , file2.txt.exe , file4.txt.exe1

有什么想法吗?

2 个答案:

答案 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();