Подтвердить что ты не робот

Как собрать все файлы в папке и ее подпапках, которые соответствуют строке

В С#, как я могу искать в папке и ее подпапках, чтобы найти файлы, соответствующие строковому значению. Моим строковым значением может быть "ABC123", а соответствующий файл может быть ABC123_200522.tif. Может ли массив собрать их? Спасибо заранее.

-Josh

4b9b3361

Ответ 1

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 - критерий поиска.

Ответ 2

Вы ищете метод Directory.GetFiles:

Directory.GetFiles(path, "*" + search + "*", SearchOption.AllDirectories)

Ответ 3

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

вы можете передать второй параметр для параметров. Кроме того, вы можете использовать linq для фильтрации результатов еще больше.

проверьте здесь для документации MSDN

Ответ 4

Если требования соответствия являются простыми, попробуйте:

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

Ответ 5

Из памяти может потребоваться настройка

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