我有一个包含多个文件夹的路径。每个文件夹都有多个子文件夹,每个主文件夹中的一个子文件夹名为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文件。
我如何实现这一目标?
答案 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');