C# 如何收集文件夹及其子文件夹中与字符串匹配的所有文件

C# 如何收集文件夹及其子文件夹中与字符串匹配的所有文件,c#,.net,C#,.net,在C#中,如何搜索文件夹及其子文件夹以查找与字符串值匹配的文件。我的字符串值可能是“ABC123”,匹配的文件可能是ABC123_200522.tif。数组可以收集这些吗?提前谢谢 -乔希 您可以为选项传入第二个参数。此外,还可以使用linq进一步过滤结果 选中您正在查找的: 如果匹配要求很简单,请尝试: string[] matchingFiles = System.IO.Directory.GetFiles( path, "*ABC123*" ); 如果它们需要更复杂的内容,可以使用正则表

在C#中,如何搜索文件夹及其子文件夹以查找与字符串值匹配的文件。我的字符串值可能是“ABC123”,匹配的文件可能是ABC123_200522.tif。数组可以收集这些吗?提前谢谢

-乔希

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

选中您正在查找的:


如果匹配要求很简单,请尝试:

string[] matchingFiles = System.IO.Directory.GetFiles( path, "*ABC123*" );
如果它们需要更复杂的内容,可以使用正则表达式(和LINQ):


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

来自内存,因此可能需要调整

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);
    }
  }
}

添加到SLaks-answer,为了使用
Directory.GetFiles
方法,请确保使用
System.IO
名称空间。

SLaks-answer(下面)实际上更好更简洁!谢谢你提供的有用的额外服务!
string[] matchingFiles = System.IO.Directory.GetFiles( path, "*ABC123*" );
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();
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);
            }
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);
    }
  }
}