我想创建一个程序来查找服务器上的文件夹大小,但是...
我有几个无法访问的文件夹(fx漫游用户配置文件 - 在服务器上),作为管理员是否可以获取这些文件夹的大小?
我想既然备份系统可以访问这些文件夹,那么我也应该......不知何故。
编辑:
我看到人们将我的问题标记为重复,但是..
模拟如何帮助我?使用模拟,我以其他用户身份运行进程,但我应该以哪个用户的身份运行它,以获取服务器上所有用户配置文件的文件夹大小(文件夹)?
已经尝试了提升的 UAC,如评论中所示,但没有效果。访问仍被拒绝。
所以我仍然没有接近我的问题的解决方案。
失败后继续下一个文件夹,那么是的;你必须自己做。我会推荐一个堆栈(深度优先)或队列(首先是繁殖)而不是递归,以及一个迭代器块(收益率返回);然后,您可以避免堆栈溢出和内存使用问题。
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 中:
右键单击项目 -> 属性 ->安全 ->启用 单击一次安全设置
单击它后,将在项目的属性文件夹下创建一个名为 app.manifest 的文件 创建后,您可以取消选中"启用 ClickOnce 安全设置"选项
打开该文件并更改此行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
自:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
这将使程序需要管理员权限,并保证您可以访问该文件夹。