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

标签 c# console-application .net

我真的是 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/

相关文章:

C++ Eclipse : stdin in different console than stdout

c# - 获取客户端和服务器之间的时区差异

c# - .net c# 等待异步事件完成并且代码中仍有 "synchronous"流的最佳方法

python - 如何指示 urwid 列表框的项目多于当前显示的项目?

c# - 站点不工作 如果功能不工作则出错

c# - 从 UserControl 访问类方法(XAML、C#、TreeView)

c# - 多部分数据意外结束

windows - OCaml 颜色控制台输出

c# - 或者在 .Replace() C# 中

c# - 绑定(bind)到集合减少到它的属性之一