2013-09-28 79 views
1

奇怪的是,我在調用GetDirectories()方法時偶爾遇到錯誤。方法Directory.GetDirectories失敗

當我們的IT部門遠程將某些文件夾移動到本地計算機時,就開始發生這種情況。只有在使用C#瀏覽這些文件夾時纔會出現此錯誤。

錯誤信息:「訪問路徑 'C:\用戶\ XXXX \ XXXXX被拒絕'

代碼:

public static string[] GetDirectoryInfo(string path) 
{ 
    if (Directory.Exists(path)) 
    { 
     //This call is failing on the new folder. 
     return Directory.GetDirectories(path); 
    } 
    return new string[0]; 
} 

不是很複雜,正確嗎?

使用Windows資源管理器導航時,該文件夾不存在。

在CMD提示符下,我可以將目錄更改爲此文件夾;跟着DIR命令,我得到錯誤'找不到文件'。

我在猜測 這個問題是一個Win32問題,當文件夾被移動時沒有得到清理。我不知道如何糾正這個問題,除了挖掘反編譯的System.IO類;如果我沒有得到解決方案,我會這樣做。

+0

你找不到文件的錯誤,但你說的到您的計算機。我很困惑。如果文件夾在資源管理器中可見,請檢查權限,否則我認爲ILSpy是找出錯誤原因的最佳選擇。 – ohmusama

+0

不,有問題的文件夾在資源管理器中不可見。權限不是問題,這是我檢查的第一件事。我一直在尋找新的工具,所以我會檢查出ILSpy。謝謝。 – user2825489

+0

權限是問題所在。請IT部門爲您解決這個問題。 –

回答

0

當軟件試圖訪問已經由Windows出於安全原因,例如像受限制的文件夾,就會出現此:

C:\Users\Default (This path is not accessible by your code) 

另一個原因是您的應用程序試圖訪問它們是不是真正的文件夾像

My Music 
My Pictures 

文件夾,如果你想讀在特定的驅動器的所有文件夾,那麼你可以做一些例外來處理這些目錄,另一件事可以幫助你是運行應用程序的administra TOR。

2

您的代碼可能試圖訪問您的帳戶/角色無法訪問的隱藏文件夾。

最簡單的辦法是趕UnauthorizedAccessException,只是吃它,所以它基本上是跳過的目錄,如:

public static string[] GetDirectoryInfo(string path) 
{ 
    if (Directory.Exists(path)) 
    { 
     try 
     { 
      //This call is failing on the new folder. 
      return Directory.GetDirectories(path); 
     } 
     catch(UnauthorizedAccessException unAuthEx) 
     { 
      // Do nothing to eat exception 
     } 
    } 
    return new string[0]; 
} 
+0

是的,這將是最簡單的,它已經實施,直到(如果)我能找到解決方案。我想保持簡單的問題,但所涉及的文件夾是在移動過程中被刪除某處的Environmental.SpecialFolders,並且映射仍然存在(猜測)。這是我需要刪除的。 – user2825489