gpt4 book ai didi

c# - 递归搜索目录中的文件

转载 作者:IT王子 更新时间:2023-10-29 03:47:39 31 4
gpt4 key购买 nike

我有以下代码通过目录递归搜索文件,它向我返回所有 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

不太擅长递归。任何指针将不胜感激。

最佳答案

你可以使用 this overload of Directory.GetFiles它为您搜索子目录,例如:

string[] files = Directory.GetFiles(sDir, "*.xml", SearchOption.AllDirectories);

这样只能搜索一个扩展名,但您可以使用类似的东西:

var extensions = new List<string> { ".txt", ".xml" };
string[] files = Directory.GetFiles(sDir, "*.*", SearchOption.AllDirectories)
.Where(f => extensions.IndexOf(Path.GetExtension(f)) >= 0).ToArray();

选择具有所需扩展名的文件(注意,扩展名区分大小写)。


在某些情况下,可能需要使用 Directory.EnumerateFiles Method 枚举文件:

foreach(string f in Directory.EnumerateFiles(sDir, "*.xml", SearchOption.AllDirectories))
{
// do something
}

如果代码在没有适当访问权限的帐户下运行,请查阅文档以了解可以抛出的异常,例如 UnauthorizedAccessException。

如果 UnauthorizedAccessException 是一个问题,那么请在 Directory.EnumerateFiles => UnauthorizedAccessException 中查看很好的答案.

关于c# - 递归搜索目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830069/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com