C# 从子目录递归收集文件的快速而肮脏的方法?
所以我有一个目录,其中存储了一堆配置文件,但现在我还有几个子目录,其中也包含配置文件。我有一个收集每个站点所有配置文件的功能,但现在它只收集目录中的文件,而不是子文件夹中的文件。旧代码:C# 从子目录递归收集文件的快速而肮脏的方法?,c#,visual-studio-2010,file,c#-4.0,directory,C#,Visual Studio 2010,File,C# 4.0,Directory,所以我有一个目录,其中存储了一堆配置文件,但现在我还有几个子目录,其中也包含配置文件。我有一个收集每个站点所有配置文件的功能,但现在它只收集目录中的文件,而不是子文件夹中的文件。旧代码: string MasterList = "ConfigsForStation1.txt"; string dirC = "..\\config\\Station1\\"; foreach (FileInfo fileC in dirC.GetFiles()) {
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中?然后对parent中的内容进行第三次传递。它感觉有点草率,我觉得有一些命令,比如dirC.getAllsub()可以帮我做到这一点?只是想寻找一些提示和想法来清理代码。您可以向其中传递一个参数,您可以使用该参数告诉它自动为您递归文件
您应该能够执行以下操作:
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
您可以向其中传递一个参数,您可以使用该参数告诉它自动为您递归文件
您应该能够执行以下操作:
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
使用
Directory.GetFiles()
和SearchOption.AllDirectories
。这将自动为您重现。使用目录.GetFiles()
和搜索选项.AllDirectories
。这将自动为您重现。我想将此作为评论来写,但stackoverflow不允许我这样做
查看提供了许多方法来实现您的要求。我想写这篇评论,但stackoverflow不让我这么做
查看提供了多种方法来执行您的请求。使用Directory.GetFiles:
var files = Directory.GetFiles("C:\\", "*", SearchOption.AllDirectories);
使用Directory.GetFiles:
var files = Directory.GetFiles("C:\\", "*", SearchOption.AllDirectories);
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
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
您使用了术语递归
,但没有实现真正的递归方法。您使用了术语递归
,但没有实现真正的递归方法。