【发布时间】:2012-04-07 11:22:40
【问题描述】:
我有以下代码通过目录递归搜索文件,该目录将所有 xml 文件的列表返回给我。一切正常,除了根目录中的 xml 文件不包含在列表中。
我明白为什么,因为它所做的第一件事是获取根目录中的目录,然后获取文件,因此缺少根目录上的 GetFiles() 调用。我尝试在 foreach 之前包含 GetFiles() 调用,但结果与我预期的不同。
public static ArrayList DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d, "*.xml"))
{
string extension = Path.GetExtension(f);
if (extension != null && (extension.Equals(".xml")))
{
fileList.Add(f);
}
}
DirSearch(d);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return fileList;
}
我的目录结构是这样的:
RootDirectory
test1.0.xml
test1.1.xml
test1.2.xml
2ndLevDir
test2.0.xml
test2.1.xml
3rdLevDir
test3.0.xml
test3.1.xml
代码返回:
test2.0.xml
test2.1.xml
test3.0.xml
test3.1.xml
我想退回所有文件,包括:
test1.0.xml
test1.1.xml
test1.2.xml
递归的诗句不太好。任何指针将不胜感激。
【问题讨论】:
-
Directory.EnumerateFiles(sDir, "*.xml", SearchOption.AllDirectories)