在文件夹中查找具有特定扩展名的文件

Dom*_*c K 89 c# filepath

给定文件夹路径(如C:\Random Folder),如何在其中找到包含特定扩展名的文件,例如txt?我假设我必须*.txt在目录中进行搜索,但我不确定我应该首先开始这个搜索.

Ant*_*ram 165

看一下System.IO.Directory类和静态方法GetFiles.它有一个接受路径和搜索模式的重载.例:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");
Run Code Online (Sandbox Code Playgroud)

  • 如果扩展名类似于txt_,则不起作用.我正在尝试确定文件夹中是否有任何*.exe文件,我只有一个*.exe_文件,但查询返回它,这是不正确的. (6认同)
  • 要递归搜索,请使用“SearchOption.AllDirectories”调用重载。像这样的东西:`string[] files = System.IO.Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);`。(其他答案涵盖了这一点,但没有涵盖这个接受的答案。) (2认同)

sgr*_*usa 28

您可以使用Directory

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
Run Code Online (Sandbox Code Playgroud)

  • 如果扩展名类似于txt_或其他任何内容,如文档https://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx中所述,则无效. (3认同)

Gre*_*g D 14

实际上,这很容易.您可以System.IO.Directory结合使用该类System.IO.Path.像(使用LINQ使它更容易):

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p));

// Get all filenames that have a .txt extension, excluding the extension
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt")
                             .Select(fn => Path.GetFileNameWithoutExtension(fn));
Run Code Online (Sandbox Code Playgroud)

当然,这种技术也有很多变化.如果您的过滤器更简单,其他一些答案会更简单.这个优点是延迟枚举(如果重要)和更灵活的过滤,代价是更多的代码.