在C#中,我如何搜索文件夹及其子文件夹以查找与字符串值匹配的文件。我的字符串值可能是“ABC123”,匹配的文件可能是ABC123_200522.tif。阵列可以收集这些吗?提前谢谢。
-Josh
答案 0 :(得分:62)
您正在寻找Directory.GetFiles
method:
Directory.GetFiles(path, "*" + search + "*", SearchOption.AllDirectories)
答案 1 :(得分:6)
如果匹配要求很简单,请尝试:
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();
答案 2 :(得分:5)
DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos");
FileInfo[] rgFiles = di.GetFiles("*.aspx");
您可以为选项传递第二个参数。此外,您可以使用linq进一步过滤结果。
答案 3 :(得分:4)
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
是搜索内容的标准。
答案 4 :(得分: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);
}
}
}
答案 5 :(得分:0)
要添加到SLaks答案中,为了使用Directory.GetFiles
方法,请确保使用System.IO
命名空间。