使用GetFileSystemInfos()获取DirectoryInfo时出错

时间:2013-03-02 21:21:30

标签: c# directory directoryinfo

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

如何跳过它们?

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

1 个答案:

答案 0 :(得分: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();