2011-12-16 66 views
3

我在写一个程序来获取所有的目录和子目录。我使用下面的代码:为什么我在Documents and Settings文件夹中遇到拒绝访问错误?

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

但我发现了一个异常,指出“访问路径‘C:\ Documents和Settings \’被拒绝。”

我使用的是Windows 7,但在资源管理器中看不到C:\ Documents and Settings \文件夹。我启用了“显示隐藏的文件和文件夹”,甚至尝试直接键入路径,但它提供了以下错误:“C:\ Documents and Settings is not accessible.Access denied。”

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

回答

15

该目录就是所谓的junction point,它应该指向c:\ users。

从MSDN文档:

他们有FILE_ATTRIBUTE_REPARSE_POINT,FILE_ATTRIBUTE_HIDDEN和FILE_ATTRIBUTE_SYSTEM文件属性设置:

这些结点可以如下鉴定。

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

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

+0

看来这个答案是不正确的; http://stackoverflow.com/questions/32796055/cant-list-some-folders/32962889#32962889 – user626528 2015-10-09 12:44:32

0

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

如果我确实开始 - >运行c:\Documents and Settings我也收到Access is Denied错误。所以有些东西在那里。

0

寻找答案一段时间后 - 我决定自己写代码。

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

为我工作。

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; 
    } 
相关问题