如何从特定命名的文件夹中获取文件信息?

时间:2018-01-31 02:39:35

标签: c#

我有一个包含多个文件夹的路径。每个文件夹都有多个子文件夹,每个主文件夹中的一个子文件夹名为prog,里面是一个xml文件。现在其他子文件夹中也可能包含xml文件,但我只想获取每个主文件夹中prog子文件夹中xml文件的文件信息。

如果我这样做

DirectoryInfo myDir = new DirectoryInfo(@"E:\\Testing");

foreach (FileInfo xmlFile in myDir.EnumerateFiles("*.xml", SearchOption.AllDirectories))
{
    string myDirectoryName = Path.GetFileNameWithoutExtension(xmlFile.Name);
    //Do some stuff
}

然后我从每个主文件夹中的所有子文件夹中获取所有xml文件,但我只想要prog子文件夹中的xml文件。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

这应该可以获得prog文件夹中的所有.xml文件。这假设不区分大小写,但可以进行调整。

DirectoryInfo myDir = new DirectoryInfo(@"E:\\Testing");

foreach(FileInfo myFile in myDir.EnumerateFiles(@"*.xml", SearchOption.AllDirectories)
    .Where(fi => fi.Directory.Name.Equals("prog")))
{
   // Do something with .xml files in "prog" folder
}

答案 1 :(得分:2)

不是递归地枚举每个XML文件,而是枚举myDir的所有目录,将“prog”添加到每个目录的路径中,然后枚举这些目录中的所有XML文件:

var progXmlFiles = myDir.EnumerateDirectories()
            .Select(d => Path.Combine(d.FullName, "prog"))
            .SelectMany(d => new DirectoryInfo(d).EnumerateFiles("*.xml"));

答案 2 :(得分:0)

你说每个主文件夹和xml文件中都会有一个 \ prog 子文件夹。但后来你说你只想获取xml文件的文件信息(复数)。

获取 prog 目录中所有xml文件的一种方法是在for循环的开头添加它:

            if (-1 == xmlFile.FullName.IndexOf("\\prog\\" + xmlFile.Name))
                continue; 

如果您只想在 prog 文件夹中立即使用.xml文件,请使用:

Finding all XML files under C:\Testing
a_test C:\Testing\a\prog\a_test.xml
b_test C:\Testing\b\prog\b_test.xml
d_test C:\Testing\d\prog\d_test.xml
Done...
Finished, press any key...

这是输出:

C:.
├───a
│   ├───a_subdir  \ a_test_error.xml
│   ├───a_subdir2
│   └───prog  \ a_test.xml
├───b
│   ├───b_subdir
│   └───prog  \ b_test.xml
├───c
│   └───prog
├───d
│   ├───d_subdir \ d_test_error.xml
│   └───prog  \ d_test.xml
└───e

以下是我的测试目录和测试文件的设置:

echo date_format($post_date, 'm-d-Y');