【问题标题】:Exception raised on special folder in Windows 7在 Windows 7 中的特殊文件夹上引发异常
【发布时间】:2013-04-09 11:47:42
【问题描述】:

在我的应用程序中,我使用以下命令从选定路径获取所有文件:

foreach (string currentFile in Directory.EnumerateFiles(@"c:\", "*.*", SearchOption.AllDirectories))
{
    //some logic here
}

问题是,当尝试访问某些目录(例如 c:\Documents and Settings)时,我得到一个 UnauthorizedAccessException

上面提到的文件夹没有显示在Windows Explorer.NET System.Windows.Forms.FolderBrowserDialog 中,我找不到这个文件夹的特定属性,所以我可以过滤枚举。

我试过thisthis 但没有用。

我可以使用任何属性或参数来限制循环中的此类目录吗?

【问题讨论】:

  • Windows 资源管理器根本没有列出“文档和设置”,因为它被标记为隐藏的系统文件夹。它不关心它是否可访问,如果您将资源管理器配置为显示隐藏和系统文件和文件夹,它会显示出来,但仍然无法访问。

标签: c# .net windows-7 directory authorization


【解决方案1】:

目录类不提供跳过无法访问的文件和文件夹的方法。您可以编写自己的目录扫描方法,该方法将递归进入每个文件夹并在发生异常时跳过它。

【讨论】:

  • 没有办法通过检查DirectoryInfo参数来检查这个?
  • 您可以使用 DirectoryInfo.GetAccessControl() 获取访问控制列表,然后尝试确定您是否拥有权限。但我认为没有理由这样做,因为捕获异常会更容易实现和理解。
  • 最终得到了这个解决方案:stackoverflow.com/a/929418/1092181,显然(并且令人惊讶地)捕获exception 比检查权限更容易。非常感谢!
【解决方案2】:

您不能让系统管理员授予您的用户对所有文件的读取权限吗?听起来有些东西是您无法访问的。虽然我不阻止您通过仅从可移植性的角度排除这些文件来解决此问题(不幸的是,我无法直接说明如何做到这一点)。

【讨论】:

  • 我不想访问未经授权的目录。我只想跳过它们。
  • 我们的安全人员如果看到这个答案会心脏病发作。
猜你喜欢
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多