为什么我的Documents and Settings文件夹出现拒绝访问错误?

我正在编写一个获取所有目录和子目录的程序。 我正在使用以下代码:

DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) { string[] directories = Directory.GetDirectories(drive.Name, "*", SearchOption.AllDirectories); } 

但我得到一个例外,说明“访问路径’C:\ Documents and Settings \’被拒绝。”

我正在使用Windows 7,我在资源管理器中看不到C:\ Documents and Settings \文件夹。 我启用了“显示隐藏文件和文件夹”,甚至尝试直接键入路径,但它出现以下错误:“C:\ Documents and Settings无法访问。访问被拒绝。”

为什么Directory.GetDirectories()拉出一个似乎不存在的目录?

这个目录就是所谓的连接点 ,它应该指向c:\ users。

从MSDN文档:

这些交接点可以识别如下:

它们具有FILE_ATTRIBUTE_REPARSE_POINT,FILE_ATTRIBUTE_HIDDEN和FILE_ATTRIBUTE_SYSTEM文件属性集。

他们还将访问控制列表(ACL)设置为拒绝对每个人的读取访问权限。

如果具有所需权限,则调用特定路径的应用程序可以遍历这些连接点。 但是,枚举连接点内容的尝试将导致失败。

我不知道如何解决,但我可以告诉你,WinXP使用了这条路径。 期望能够访问该文件夹的旧程序不会与Win7兼容,因此Microsoft将其重定向到您的Users文件夹。

如果我执行开始 – >运行c:\Documents and Settings我也会收到Access is Denied错误。 那里有东西。

在寻找答案一段时间之后 – 我决定自己编写代码。

我在这里分享基本的想法,而不是完整的代码 – 采取重要的部分,并使用它在您的代码中实现它。

为我工作。

 public void directoryCrawl(string startFolder) { try { System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder); /* here you can add "dir" to some kind of list of your choice. */ foreach (System.IO.DirectoryInfo directory in dir.GetDirectories()) { try { directoryCrawl(directory.FullName); } catch { Console.Writeline("Access denied to: \"" + directory.FullName + "\"."); } } } catch { if (!String.IsNullOrEmpty(startFolder)) { Console.Writeline("Access denied to: \"" + startFolder + "\"."); } } return; }