【问题标题】:System.UnauthorizedAccessException C# in winformsWinforms 中的 System.UnauthorizedAccessException C#
【发布时间】:2012-07-16 20:17:16
【问题描述】:

问题是 回收站文档和设置 文件夹/文件上的 System.UnauthorizedAccessException。 (VS2010 .NET 4.0 C#)

以下 LINQ 代码用于查询目录大小。我已经尝试过 GetFiles 和 EnumerateFiles。我肯定以管理员身份运行。在注释代码中,您可以看到我尝试测试另一篇 Stack 帖子中的某些属性但没有成功。

DirectorySize(new DirectoryInfo(@"C:\\"),true);

public static long DirectorySize(DirectoryInfo dInfo, bool includeSubDir)
{
    // Enumerate all the files
    long totalSize = dInfo.EnumerateFiles().Sum(file => file.Length);
        //.Where(d => (d.Attributes & FileAttributes.ReparsePoint) == 0 && (d.Attributes & FileAttributes.System) == 0)
        //.Sum(file => file.Length);

    if (includeSubDir) // Subdirs?
    {
        // Enumerate all sub-directories
        totalSize += dInfo.EnumerateDirectories().Sum(dir => DirectorySize(dir, true));
            //.Where(d => (d.Attributes & FileAttributes.ReparsePoint) == 0 && (d.Attributes & FileAttributes.System) == 0)
            //.Sum(dir => DirectorySize(dir, true));
    }
    return totalSize;
}

我想要一个简洁的 LINQ 方法,我不必手动循环和测试每个文件夹/目录。我发现了一些类似操作的重复项的 MS 代码。它的错误也是一样的。

提前致谢,

【问题讨论】:

  • 我认为您需要吞下药丸并尝试/捕获异常。 stackoverflow.com/a/5957525/284240
  • 这与Winforms无关
  • 之所以提到winforms是为了搭建环境,把常用的asp.net/IIS环境从讨论中剔除。
  • @TimSchmelter 我认为你是对的,try/catch 不能内联。我知道代码太漂亮和简洁了。

标签: c# linq permissions


【解决方案1】:

堆栈溢出中还有其他引用;但您可能需要为您的应用程序本身定义权限。 Setting Perms

还有这个小块 [ C:\Users is a JUNCTION]; C#: Access to path <'filepath'> is denied

【讨论】:

    【解决方案2】:

    try/catch 进行救援,如following article 所示。还有alternatives

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多