在C#中访问Windows文件夹

时间:2018-09-22 07:49:19

标签: c# permissions filesystems

我正在使用Winforms和C#7.0制作软件。 我必须获取C:\Program FilesC:\Program Files (x86)中的所有文件。 当我尝试Directory.GetFiles(@"C:\Program Files\", "*.*", SearchOption.AllDirectories时,遇到一个例外,即对路径C:\ Program Files \ Common Files'的访问被拒绝。

我试图以管理员身份启动程序,但仍然无法正常工作。 如何获得拒绝访问文件夹中所有文件的列表并读取它们?

亲切的问候

1 个答案:

答案 0 :(得分:0)

您将不得不跳过无法读取的目录(假设您无法在系统帐户或具有读取所有目录特权的其他帐户下运行程序)。

这里必须要小心,因为您不能在yield中使用try/catch。这是一种方法:

public static IEnumerable<string> EnumFilesRecursively(string rootDirectory)
{
    // Helper method to call GetEnumerator(), returning null on exception.

    IEnumerator<T> getEnumerator<T>(Func<IEnumerable<T>> getEnumerable)
    {
        try   { return getEnumerable().GetEnumerator(); }
        catch { return null; }
    }

    // Enumerate all files in the current root directory.

    using (var enumerator = getEnumerator(() => Directory.EnumerateFiles(rootDirectory)))
    {
        if (enumerator != null)
            while (enumerator.MoveNext())
                yield return enumerator.Current;
    }

    // Recursively enumerate all subdirectories.

    using (var enumerator = getEnumerator(() => Directory.EnumerateDirectories(rootDirectory)))
    {
        if (enumerator != null)
            while (enumerator.MoveNext())
                foreach (var file in EnumFilesRecursively(enumerator.Current))
                    yield return file;
    }
}

要测试:

public static void Main(string[] args)
{
    foreach (var file in EnumFilesRecursively(@"C:\Program Files\"))
    {
        Console.WriteLine(file);
    }
}