繁体   English   中英

在C#中访问Windows文件夹

[英]Get access to windows folders in C#

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

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

亲切的问候

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

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

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM