【问题标题】:Error on getting DirectoryInfo with GetFileSystemInfos()使用 GetFileSystemInfos() 获取 DirectoryInfo 时出错
【发布时间】:2013-03-02 21:21:29
【问题描述】:

我在尝试获取DirectoryInfo 时遇到错误,因为存在一些只读文件和文件夹。

我怎样才能跳过它们?

var dirinfo = new DirectoryInfo(Path_Tb_Path.Text);
var entries = dirinfo.GetFileSystemInfos("**", SearchOption.AllDirectories);

【问题讨论】:

  • “我收到一个错误”信息不足 - 究竟是什么错误?
  • 根据您提供的代码,只读的文件/文件夹不应因为获取FileSystemInfos 而引发错误。您可能会遇到一些权限错误。但正如 Jon 所指出的,如果没有错误详细信息,很难为您提供帮助。

标签: c# directory directoryinfo


【解决方案1】:

在 .NET 4.0 中,您可以使用 EnumerateFileSystemInfos 方法。例如,您可以编写以下递归方法,该方法将吞噬某些文件的UnauthorizedAccessException,并仅将那些文件包含在您有权访问的结果中:

public static IEnumerable<FileSystemInfo> SafeGetFileSystemInfosRecursive(DirectoryInfo directory, string searchPattern)
{
    try
    {
        return directory
            .EnumerateFileSystemInfos(searchPattern)
            .Concat(
                directory
                    .EnumerateDirectories()
                    .SelectMany(x => SafeGetFileSystemInfosRecursive(x, searchPattern))
            );
    }
    catch (UnauthorizedAccessException)
    {
        return Enumerable.Empty<FileSystemInfo>();
    }
}

然后像这样调用方法:

var dirInfo = new DirectoryInfo(Path_Tb_Path.Text);
FileSystemInfo[] entries = SafeGetFileSystemInfosRecursive(dirInfo, "**").ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多