【问题标题】:Get access to windows folders in C#在 C# 中访问 windows 文件夹
【发布时间】:2018-09-22 07:49:19
【问题描述】:

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

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

亲切的问候

【问题讨论】:

  • 这个问题的答案也不行
  • 将应用程序清单文件添加到您的项目中,在配置中以管理员身份运行,或以管理员身份启动 Visual Studio,确保您拥有管理权限
  • 您的程序(或您)没有读取这些目录的适当权限。你需要改变它,或者设计你的方法以跳过你无法阅读的目录
  • 首先我需要阅读目录。其次,我有管理权限。我还在我的 app.manifest 中更改了以管理员身份运行配置

标签: c# permissions filesystems


【解决方案1】:

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

这里你必须小心,因为你不能在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);
    }
}

【讨论】:

  • @Owns_Rekt 在这种情况下,您需要使用系统凭据运行应用程序,否则将不允许枚举目录内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多