我想创建一个程序,在我的服务器上找到文件夹大小,但是......
我有几个无法访问的文件夹(fx漫游用户配置文件 - 在服务器上),管理员是否可以获取这些文件夹的大小?
我想因为备份系统可以访问这些文件夹,所以我也应该......不知何故。
编辑:
我看到人们将我的问题标记为重复,但是......
Impersonate如何帮助我?通过模拟,我将该进程作为另一个用户运行,但我应该将其运行为哪个用户,以获取服务器(文件夹)上所有用户配置文件的文件夹大小?
已经在评论中尝试过提升的UAC,但没有效果。仍然拒绝访问。
所以我仍然没有解决我的问题。
答案 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" />
这将使程序需要管理员权限,并且它将保证您有权访问该文件夹。