2017-07-22 20 views
0

簡単な質問です。フォルダーを無視C#(System.UnauthorizedAccessException)

(はい、私は知っている、それは多分私のPCを爆破)\ \ユーザーとにかく、私は(このエラーを取得しています:それは、Cのすべてのディレクトリとサブディレクトリの一覧を表示

listBox1.Items.AddRange(Directory.GetDirectories("C:\\Users\\", "*" ,SearchOption.AllDirectories)); 

:私はこのコードを実行していますSystem.UnauthorizedAccessException)このエラーは特別なフォルダ "C:\ Users \ユーザーすべてのユーザー\" から来ている

と "C:\ Users \ユーザーUSER \のAppData \"

どのように維持するプログラムし、このフォルダを無視することができます例外なしですべてのdirとsubdをリストしますか?

+0

「try catch」を使用する – user2455111

答えて

0

残念ながら、必要な権限なしですべてのディレクトリを除外することはできません。 UnauthorizedAccessExceptionをキャッチすることで、問題に対処する独自の再帰関数を実装する必要があります。 in this questionを説明したような方法は非常に高速だが信頼できるものではない多くの例外があるかもしれないので:

[...]権限は(存在すらファイル)揮発性である - 彼らはいつでも変更することができます[...]

public static void GetDirectories(string path, Action<string> foundDirectory) 
{ 
    string[] dirs; 
    try 
    { 
     dirs = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly); 
    } 
    catch (UnauthorizedAccessException) 
    { 
     //Ignore a directory if an unauthorized access occured 
     return; 
    } 

    foreach (string dir in dirs) 
    { 
     foundDirectory(dir); 
     //Recursive call to get all subdirectories 
     GetDirectories(dir, foundDirectory); 
    } 
} 

は単に

List<string> allDirectories = new List<string>(); 
GetDirectories(@"C:\Users\", d => allDirectories.Add(d)); 
ような関数を呼び出します。ここでは

は私の可能な解決策であります3210

関連する問題