【发布时间】: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