0

所以我有一个存储一堆配置文件的目录,但现在我也有几个子目录也包含配置文件。我有一个收集每个站的所有配置文件的功能,但现在它只收集目录中的文件,而不是子文件夹。旧代码:

    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?然后对父项中的内容进行第三次传递。感觉有点草率,我觉得像 dirC.getAllsub() 这样的命令会为我这样做?只是寻找提示和想法来清理代码。

4

5 回答 5

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
于 2013-06-12T19:49:09.830 回答
1

Directory.GetFiles()与 一起使用SearchOption.AllDirectories。这将自动为您递归。

于 2013-06-12T19:49:16.220 回答
1

我想把它写成评论,但 stackoverflow 不允许我这样做。

看看这个问题,它提供了很多方法来做你所问的。

于 2013-06-12T19:50:29.043 回答
1

使用 Directory.GetFiles:

var files = Directory.GetFiles("C:\\", "*", SearchOption.AllDirectories);
于 2013-06-12T19:50:51.680 回答
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.

于 2013-06-12T19:52:34.177 回答