如何收集匹配特定字符串的文件夹及其子文件夹中的所有文件

21

在C#中,如何搜索包括子文件夹在内的文件夹以查找与字符串值匹配的文件。例如,我的字符串值可能为“ABC123”,而匹配的文件可能是ABC123_200522.tif。是否可以使用数组来收集这些文件?

6个回答

76

7
如果匹配要求简单,尝试以下方法:
string[] matchingFiles = System.IO.Directory.GetFiles( path, "*ABC123*" );

如果需要更复杂的内容,您可以使用正则表达式(和LINQ):
string[] allFiles = System.IO.Directory.GetFiles( path, "*" );
RegEx rule = new RegEx( "ABC[0-9]{3}" );
string[] matchingFiles = allFiles.Where( fn => rule.Match( fn ).Success )
                                 .ToArray();

谢谢你提供这个有用的小额外! - Ron16

6
 DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos");
 FileInfo[] rgFiles = di.GetFiles("*.aspx");

您可以传入第二个参数以获取选项。此外,您还可以使用LINQ进一步过滤结果。

请查看这里的MSDN文档


3
void DirSearch(string sDir) 
        {
            try 
            {
                foreach (string d in Directory.GetDirectories(sDir)) 
                {
                    foreach (string f in Directory.GetFiles(d, sMatch)) 
                    {
                          lstFilesFound.Add(f);
                    }
                    DirSearch(d);
                }
            }
            catch (System.Exception excpt) 
            {
                Console.WriteLine(excpt.Message);
            }

其中sMatch是搜索内容的标准。


6
SLaks的回答(下面)实际上更好并且更简洁! - cacau

1

可能需要调整,因为是从记忆中写的

class Test
{
  ArrayList matches = new ArrayList();
  void Start()
  {
    string dir = @"C:\";
    string pattern = "ABC";
    FindFiles(dir, pattern);
  }

  void FindFiles(string path, string pattern)
  {
    foreach(string file in Directory.GetFiles(path))
    {
      if( file.Contains(pattern) )
      {
        matches.Add(file);
      }
    }
    foreach(string directory in Directory.GetDirectories(path))
    {
      FindFiles(directory, pattern);
    }
  }
}

0

补充SLaks的答案,为了使用Directory.GetFiles方法,请确保使用System.IO命名空间。


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