【问题标题】:Get files of certain extension c#获取特定扩展名c#的文件
【发布时间】:2023-03-02 23:03:01
【问题描述】:

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

例如,我希望获取所有带有“.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匹配吗??

标签: c# directory filesystems getfiles


【解决方案1】:

这是一个常见的问题。注意MSDN documentation

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

你不能通过搜索.exe扩展来解决它;您需要在客户端代码中再过滤一次结果。

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

file1.exe
file2.txt.exe

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

file4.txt.exe1

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

  • 具有exe 扩展名的文件。
  • 没有多个扩展名的文件。

查看 Ahmed 的答案,了解获得所需算法的绝妙方法。

【讨论】:

  • 非常感谢您的详细回复。我确实使用了 Ahmed 的方法,而且效果很好。
【解决方案2】:

试试这个:

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

【讨论】:

  • 看看源目录是什么
猜你喜欢
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多