0

当我尝试获取 a 时出现错误,DirectoryInfo因为有一些只读文件和文件夹。

我怎样才能跳过它们?

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

1 回答 1

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();
于 2013-03-02T22:01:37.650 回答