在C#中,如何通過文件夾及其子文件夾搜索來查找與字符串值匹配的文件。我的字符串值可能是「ABC123」,匹配的文件可能是ABC123_200522.tif。陣列能收集這些嗎?提前致謝。如何收集與字符串匹配的文件夾及其子文件夾中的所有文件
-Josh
在C#中,如何通過文件夾及其子文件夾搜索來查找與字符串值匹配的文件。我的字符串值可能是「ABC123」,匹配的文件可能是ABC123_200522.tif。陣列能收集這些嗎?提前致謝。如何收集與字符串匹配的文件夾及其子文件夾中的所有文件
-Josh
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
是一個什麼樣的搜索標準。
DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos");
FileInfo[] rgFiles = di.GetFiles("*.aspx");
,你可以在選項的第二個參數傳遞。另外,你可以使用linq來進一步過濾結果。
您正在尋找的Directory.GetFiles
method:
Directory.GetFiles(path, "*" + search + "*", SearchOption.AllDirectories)
如果匹配的要求很簡單,嘗試:
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 2017-03-04 19:53:31
從內存中,因此可能需要調整
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答案(下)實際上是更好的方式+更簡潔! – cacau 2014-05-22 07:58:24
我也同意http://stackoverflow.com/a/2700080/14753更清潔 – Glennular 2015-10-09 22:00:02