扫描文件夹大小时有些是"访问被拒绝"?

时间:2016-02-18 10:23:12

标签: c# vb.net

我想创建一个程序,在我的服务器上找到文件夹大小,但是......

我有几个无法访问的文件夹(fx漫游用户配置文件 - 在服务器上),管理员是否可以获取这些文件夹的大小?

我想因为备份系统可以访问这些文件夹,所以我也应该......不知何故。

编辑:

我看到人们将我的问题标记为重复,但是......

  1. Impersonate如何帮助我?通过模拟,我将该进程作为另一个用户运行,但我应该将其运行为哪个用户,以获取服务器(文件夹)上所有用户配置文件的文件夹大小?

  2. 已经在评论中尝试过提升的UAC,但没有效果。仍然拒绝访问。

  3. 所以我仍然没有解决我的问题。

1 个答案:

答案 0 :(得分:1)

如果你想在失败后继续使用下一个文件夹,那么是的;你必须自己做。我建议使用Stack(深度优先)或Queue(bredth优先)而不是递归,以及迭代器块(yield return);那么你可以避免堆栈溢出和内存使用问题。

public static IEnumerable<string> GetFiles(string root, string searchPattern)
{
    Stack<string> pending = new Stack<string>();
    pending.Push(root);
    while (pending.Count != 0)
    {
        var path = pending.Pop();
        string[] next = null;
        try
        {
            next = Directory.GetFiles(path, searchPattern);                    
        }
        catch { }
        if(next != null && next.Length != 0)
            foreach (var file in next) yield return file;
        try
        {
            next = Directory.GetDirectories(path);
            foreach (var subdir in next) pending.Push(subdir);
        }
        catch { }
    }
}

或者您可以执行以下操作:

您可以设置程序,以便只能以管理员身份运行。

在Visual Studio中:

  

右键点击项目 - &gt;属性 - &gt;安全 - &gt;启用   ClickOnce安全设置

单击它后,将在项目的app.manifest属性文件夹下创建一个文件,一旦创建该文件,您可以取消选中启用ClickOnce安全设置选项

打开该文件并更改此行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

为:

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

这将使程序需要管理员权限,并且它将保证您有权访问该文件夹。