所以我有一个目录,其中存储了一堆配置文件,但现在我还有几个子目录,它们也包含配置文件。我有一个收集每个站的所有配置文件的功能,但现在它只收集目录中的文件,而不是子文件夹。旧代码:
string MasterList = "ConfigsForStation1.txt";
string dirC = "..\\config\\Station1\\";
foreach (FileInfo fileC in dirC.GetFiles())
{
if(!System.IO.Path.GetExtension(fileC.FullName).EndsWith(".confg"))
{ WriteToList(fileC,MasterList);}
}
现在有了这个子目录的东西在这些方面实现了更多:
string MasterList = ...;
string dirC = ...;
//collect files in sub directories substations 1 & 2
foreach(DirectoryInfo Dx in dirC.GetDirectories())
{ foreach(FileInfo fileC in Dx.GetFiles())
{...}
}
//collect files in parent directory station 1
foreach(FileInfo fileC in dirC.GetFiles())
{...}
我的问题是:是否有更简洁的方法从所有子文件夹中收集文件,而不是将foreach嵌入foreach中?然后为父母的东西做第三遍。它感觉abit马虎,我觉得像dirC.getAllsub()这样的命令会为我这样做吗?只是寻找清理代码的提示和想法。
答案 0 :(得分:2)
Directory.EnumerateFiles()
可以传递SearchOption.AllDirectories
参数,您可以使用该参数告诉它自动为您递归文件。
您应该可以执行以下操作:
foreach (string filename in Directory.EnumerateFiles(dirC, "*.confg", SearchOption.AllDirectories))
... Do something with filename
或者如果您需要处理每个文件:
foreach (string filename in Directory.EnumerateFiles(dirC, "*", SearchOption.AllDirectories))
... Do something with filename
答案 1 :(得分:1)
将Directory.GetFiles()
与SearchOption.AllDirectories
一起使用。这将自动为你递归。
答案 2 :(得分:1)
我想把它写成评论但是stackoverflow不让我。
查看this question,它提供了许多方法来完成您的要求。
答案 3 :(得分:1)
使用Directory.GetFiles:
var files = Directory.GetFiles("C:\\", "*", SearchOption.AllDirectories);
答案 4 :(得分:1)
GetFiles()
方法将一次性全部返回:
String dirC = "..\\config\\Station1\\";
DirectoryInfo di = new DirectoryInfo(dirC);
FileInfo[] fia = di.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo fi in fia)
{
//do something with the file
}
您可以将搜索模式*.*
替换为您要查找的文件,例如*.cfg
。