如何收集文件夹及其与字符串匹配的子文件夹中的所有文件
在C#中,如何搜索文件夹及其子文件夹以查找与字符串值匹配的文件。 我的字符串值可能是“ABC123”,匹配的文件可能是ABC123_200522.tif。 arrays可以收集这些吗? 提前致谢。
-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
是搜索内容的标准。
您正在寻找Directory.GetFiles
方法 :
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();
DirectoryInfo di = new DirectoryInfo("c:/inetpub/wwwroot/demos"); FileInfo[] rgFiles = di.GetFiles("*.aspx");
你可以为选项传递第二个参数。 此外,您可以使用linq进一步过滤结果。
在这里查看MSDN文档
从记忆中可能需要调整
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); } } }
- 如何按索引对项目进行分组? C#LINQ
- 使用C#在Little或Big Endian中写入/读取二进制数据的最佳方法?
- 是否可以使FolderBrowserDialog的默认路径显示在库而不是实际磁盘中?
- 用C#w / out复制直接读取大型二进制文件
- 例外:使用Entity框架ExecuteStoreQuery函数执行Insert Stored Procedure
- entity framework:按月进行有效分组
- 为什么不使用自定义类而不是inheritanceEventArgs类
- FileSystemWatcher失败,有1000个文件创建
- 使用DateTime.TryParse检查字符串是否是有效日期