gpt4 book ai didi

c# - 获取目录时出现 System.UnauthorizedAccessException

转载 作者:行者123 更新时间:2023-11-30 13:01:05 27 4
gpt4 key购买 nike

我真的是 C# 的新手,所以我一直在做一个小宠物项目。

我创建了一个小程序,可以将目录的大小与给定的大小进行比较。如果目录相同或更大,则它会记录该目录的路径。

long size = Convert.ToInt32(Size) * 1024 * 1024;
string[] directories = Directory.GetDirectories(path, "*", SearchOption.AllDirectories); //the error occurs on this line
Array.Sort(directories);

foreach (string name in directories)
try
{
DirectoryInfo directory = new DirectoryInfo(name);
long dir = directory.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length);

if (dir >= ScanSize)
Console.WriteLine(directory);
}

catch (UnauthorizedAccessException) { }

我应该注意到输入字符串和 long size = Convert.ToInt32(Size) 来自 Main()

中的参数

我在某处阅读了我不应该使用的内容

Directory.GetDirectories(ScanPath, "*", SearchOption.AllDirectories);

因为它会同时获取所有目录。但是如果我删除它,它只会获取给定路径中的目录,而没有任何子目录。所以我被告知应用递归,但我发现这些相当困难。我在 file.Attributes 上阅读了一些关于隐藏文件的内容,但我不知道在哪里应用它们。

我是系统管理员,我计划在整个数据驱动器上运行它。 D:\

但是在这种情况下,当程序试图访问 D:\的垃圾桶时会发生错误,但即使跳过这个特定位置,错误仍然会在另一个无法访问的位置返回。

我希望这里的任何人都知道一个很好的例子或者知道一个解释这个的网站。

最佳答案

递归是你的 friend 。根据需要在循环中添加错误处理。试试这个:

    private static long maxSize = 5 * 1024 * 1024;

static void Main(string[] args)
{

GetDirectorySize(new DirectoryInfo(@"d:\"));

}

static long GetDirectorySize(DirectoryInfo dir)
{

long size = 0;

foreach(DirectoryInfo d in dir.EnumerateDirectories("*",SearchOption.TopDirectoryOnly)) {
size += GetDirectorySize(d);
}

size += dir.EnumerateFiles("*",SearchOption.TopDirectoryOnly).Sum(fi => fi.Length);

if (size > maxSize)
{
Console.WriteLine("Directory: {0} Size: {1}", dir, size);
}

return size;
}

关于c# - 获取目录时出现 System.UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20544211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com