2014-03-28 43 views
8

我試圖通過我的應用程序中的SpecialFolder(Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.DesktopDirectory)進行遞歸,並且它適用於英語安裝。在非英語操作系統上通過SpecialFolder目錄遞歸異常

但是我有在非英語安裝了以下問題:

  1. 當我使用非定域路徑我得到UnauthorizedAccessException因爲我嘗試訪問

  2. 如果所有子文件夾我本地化Environment.GetFolderPath的結果並嘗試獲取子目錄的列表,我在本地化路徑上獲得DirectoryNotFoundException。局部路徑的一個例子:

原始 - >C:\用戶\託尼\應用程序數據\漫遊\微軟\的Windows \開始菜單

本地化 - >C: \ Utilsateurs \ tony \ AppData \ Roaming \ Microsoft \ Windows \ MenuDémarrer

我使用Environment.GetFolderPath來獲取目錄,然後使用fo搜索特定文件的位置llowing方法:

private static IEnumerable<string> LocateAppShortcut(string dir) 
{ 
    foreach (string directory in Directory.GetDirectories(dir)) 
    { 
     foreach (string file in Directory.GetFiles(directory, "MyApp.appref-ms")) 
     { 
      yield return file; 
     } 

     foreach (string file in LocateAppShortcut(directory)) 
     { 
      yield return file; 
     } 
    } 
} 

我尋找將允許給予起點其中起始目錄可以包含重分析和/或交接點時,我能夠可靠地通過Environment.GetFolderPath返回目錄路徑遞歸的方法。

+0

它可能是您的程序需要管理員權限? – TaW

+0

@TaW我也嘗試以管理員身份運行程序,但仍然出現錯誤。 – dmck

+0

@dmck即使在以admin身份運行時,您也會得到UnauthorizedAccessException異常?如果是這樣,那就是......很奇怪。至於GetFolderPath的本地化結果...您是在法語版本的操作系統上運行,還是隻在法語本地化的應用程序上運行英文版的操作系統? – joce

回答

1

AFAIK,本地化系統文件夾只是別名,如果您運行cmd並指向主驅動器,您將看到「users」文件夾被稱爲「Users」,與您的系統語言無關,因此檢查你的路徑。我已經證實了這一點,因爲我的系統配置在西班牙:

C:\>dir 
El volumen de la unidad C es ---------- 
El número de serie del volumen es: --------- 

Directorio de C:\ 

10/12/2013 12:26 <DIR>   inetpub 
06/10/2013 17:51 <DIR>   Intel 
18/02/2014 14:34 <DIR>   Mis lugares Web 
03/12/2013 17:52 <DIR>   NVIDIA 
22/08/2013 17:22 <DIR>   PerfLogs 
24/02/2014 14:35 <DIR>   Program Files 
12/06/2014 09:18 <DIR>   Program Files (x86) 
18/09/2013 20:41 <DIR>   Toshiba 
10/12/2013 12:42 <DIR>   Users 
11/04/2014 15:08 <DIR>   Windows 
       0 archivos    0 bytes 
       11 dirs 664.620.318.720 bytes libres 

C:\> 

我dno't有足夠的數據來診斷你的問題,但你可以通過從獲得的FolderBrowserDialog隨機路徑,並將它們傳遞給測試功能調試您的功能,看看他們哪些工作,哪些不工作,看看它是主要的電話失敗還是其中一個遞歸...

相關問題