我有以下代码通过目录递归搜索文件,该目录返回所有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;
}
Run Code Online (Sandbox Code Playgroud)
我的目录结构类似于:
RootDirectory
test1.0.xml
test1.1.xml
test1.2.xml
2ndLevDir
test2.0.xml
test2.1.xml
3rdLevDir
test3.0.xml
test3.1.xml
Run Code Online (Sandbox Code Playgroud)
代码返回:
test2.0.xml
test2.1.xml
test3.0.xml
test3.1.xml
Run Code Online (Sandbox Code Playgroud)
我想返回每个文件,包括:
test1.0.xml
test1.1.xml
test1.2.xml
Run Code Online (Sandbox Code Playgroud)
不太适用于递归.任何指针都将非常感激.
我最近需要枚举整个文件系统,以查找特定类型的文件以进行审计.由于对要扫描的文件系统的权限有限,这导致我遇到几个例外.其中,最流行的是UnauthorizedAccessException以及我的懊恼,PathTooLongException.
这些通常不会成为问题,除了它们使IEnumerable无效,从而阻止我完成扫描.
我只是VS,C#和XAML的新手.我有这个项目建设,我想在我的D;\驱动器中显示所有图像.所以我实际上从这个问题得到了这个代码,幸运的是,我让它没有任何困难地工作.我可以告诉代码是有效的,因为我的应用程序现在需要大约2分钟才能启动,因此由于搜索到的图像而被延迟
public static IEnumerable<string> GetDirectoryFiles(string rootPath, string patternMatch, SearchOption searchOption)
{
var foundFiles = Enumerable.Empty<string>();
if (searchOption == SearchOption.AllDirectories)
{
try
{
IEnumerable<string> subDirs = Directory.EnumerateDirectories(rootPath);
foreach (string dir in subDirs)
{
foundFiles = foundFiles.Concat(GetDirectoryFiles(dir, patternMatch, searchOption));
}
}
catch (UnauthorizedAccessException) { }
catch (PathTooLongException) { }
}
try
{
foundFiles = foundFiles.Concat(Directory.EnumerateFiles(rootPath, patternMatch));
}
catch (UnauthorizedAccessException) { }
return foundFiles;
}
Run Code Online (Sandbox Code Playgroud)
我用这行代码来调用函数 GetDirectoryFiles
string[] filePaths = {};
string[] extObj = { "*.JPG", ".JPEG", ".PNG", ".GIF", …Run Code Online (Sandbox Code Playgroud)