2011-12-16 61 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; 
    } 
相關問題