Как собрать все файлы в папке и ее подпапках, которые соответствуют строке
В С#, как я могу искать в папке и ее подпапках, чтобы найти файлы, соответствующие строковому значению. Моим строковым значением может быть "ABC123", а соответствующий файл может быть ABC123_200522.tif. Может ли массив собрать их? Спасибо заранее.
-Josh
Ответы
Ответ 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);
}
}
}