相关疑难解决方法(0)

以递归方式搜索目录中的文件

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

不太适用于递归.任何指针都将非常感激.

c# recursion

57
推荐指数
2
解决办法
13万
查看次数

DirectoryInfo.EnumerateFiles(...)导致UnauthorizedAccessException(和其他异常)

我最近需要枚举整个文件系统,以查找特定类型的文件以进行审计.由于对要扫描的文件系统的权限有限,这导致我遇到几个例外.其中,最流行的是UnauthorizedAccessException以及我的懊恼,PathTooLongException.

这些通常不会成为问题,除了它们使IEnumerable无效,从而阻止我完成扫描.

c# algorithm .net-4.0

9
推荐指数
1
解决办法
5045
查看次数

从我的驱动器获取文件在c#中返回0

我只是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)

c#

3
推荐指数
2
解决办法
71
查看次数

标签 统计

c# ×3

.net-4.0 ×1

algorithm ×1

recursion ×1