DirectoryInfo.GetFiles() error: System.UnathorizedAccessException

DirectoryInfo.GetFiles() error: System.UnathorizedAccessException

请帮帮我!我有个问题。 代码:

...    
currentDirectory = new DirectoryInfo(absoluteCurrentPath);
FileInfo[] allFiles = currentDirectory.GetFiles("*", SearchOption.AllDirectories);
model.AllFiles = new List<MyFile>();
foreach (var f in allFiles)
{

    model.AllFiles.Add(new MyFile(f.Name, f.FullName, Utilites.ConvertBytesToMegabytes(f.Length)));
}

DirectoryInfo CurrentDirectory = "C:\"或等于其他有系统文件的目录时,则除外错误:System.UnathorizedAccessException。 当我接受块 try-catch 时,它只会跳过 GetFiles()。 如何获取所有文件并仅跳过系统文件或获取所有文件而不跳过文件? 谢谢!

有一个我前段时间写的方法:

public static IEnumerable<FileInfo> EnumerateFiles(string path, string searchPattern = null)
{
    searchPattern = searchPattern ?? "*";

    var queue = new Queue<string>();

    queue.Enqueue(path);

    do
    {
        path = queue.Dequeue();

        foreach (var file in SafeEnumerateFiles(path, searchPattern))
        {
            yield return new FileInfo(file);
        }

        foreach (var directory in SafeEnumerateDirectories(path))
        {
            queue.Enqueue(directory);
        }
    }
    while (queue.Any());
}

static IEnumerable<string> SafeEnumerateFiles(string path, string searchPattern)
{
    try
    {
        return Directory.EnumerateFiles(path, searchPattern);
    }
    catch (DirectoryNotFoundException) { }
    catch (SecurityException) { }
    catch (UnauthorizedAccessException) { }

    return Enumerable.Empty<string>();
}

static IEnumerable<string> SafeEnumerateDirectories(string path)
{
    try
    {
        return Directory.EnumerateDirectories(path);
    }
    catch (DirectoryNotFoundException) { }
    catch (SecurityException) { }
    catch (UnauthorizedAccessException) { }

    return Enumerable.Empty<string>();
}

该方法会跳过您没有权限的文件夹。