【问题标题】:Directory.Getfiles does not return any value when used with "SearchOption.AllDirectories"Directory.Getfiles 与“SearchOption.AllDirectories”一起使用时不返回任何值
【发布时间】:2022-01-01 00:44:57
【问题描述】:

您好,我正在尝试搜索以特定路径中的给定字符序列开头的所有文件和文件夹。 (路径由用户给定,顺序也是如此)。

为此,我一直在使用Directory.GetFilesDirectory.GetDirectories 方法。 但是,当我在未定义搜索选项的情况下进行搜索时,它不会返回所有可能找到的文件/文件夹。所以我添加了SearchOption.AllDirectiories 参数,但是当它存在时,该函数不会返回任何内容。 这是我的代码:

try
{
    // Search for directories 

    foreach (string d in Directory.GetDirectories(path, $"{param}*", SearchOption.AllDirectories))   
    {
        Console.WriteLine(d);
        found_directories.Add(d);
    }

    Console.WriteLine("");
    // Search for files

    foreach (string f in Directory.GetFiles(path, $"{param}*", SearchOption.AllDirectories))
    {
        Console.WriteLine(f);
        found_files.Add(f);
    }

}
catch (UnauthorizedAccessException)
{
    // Some directories cannot be accessed and hence cause the program to crash 
    // So it's neccesary to catch the error
}

break;

我已经看过这些帖子(对我没有帮助):

Directory.GetFiles Not returning a file

Directory.GetFiles(path, ".txt", SearchOption.AllDirectories); doesn't deliver a file

Directory.GetFiles - SearchOption.AllDirectories Does not give files in subfolders (vb)

【问题讨论】:

  • 忘了解释,最后的break语句是有的,因为所有这些代码都是在switch语句的情况下运行的。
  • {param} 是否包含点?
  • param 的值是什么?当我将其设置为空时,一切正常。
  • @JeroenvanLangen 不,它不是,它是用户输入的序列,例如:“abc”,我在末尾添加了通配符,因此它会查找以该序列开头的文件
  • Console.WriteLine() 不会导致无限循环,您目前发布的任何代码也不会导致,因此看起来其他地方存在问题。

标签: c#


【解决方案1】:

所以在做了一些研究之后,我发现了这个问题。

  • Directory.GetFiles() / Directory.GetDirectories() 本身就有缺陷。当发生任何异常时,该功能不会继续搜索文件/文件夹。这是因为这些函数内部没有错误处理。尝试自己编写 try/catch 是没有好处的,因为即使您捕获了异常,该函数也会完成而不返回任何内容。

有解决办法吗?

不,但有一个解决方法。

解决方法

改用这个 github 仓库:https://github.com/astrohart/FileSystemEnumerable/

它是该功能的改进版本,它完成了所有错误处理,因此您无需担心任何事情,我自己测试过,它适用于我。

github repo 与this stackoverflow 问题相关。

对于将来可能会遇到同样问题的任何人,我建议您查看此链接。

我希望通过回答我自己的问题,我将来可以帮助某人。 干杯:)!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多