
アクセス制限により Directory.GetFiles メソッドによって例外が発生しました
ネットワーク ファイル システムまたは制御された環境のファイル システムにアクセスすると、特定のフォルダーへのアクセスが制限される場合があります。これにより、Directory.GetFiles などのメソッドが例外をスローし、プログラムの実行が中断されます。
問題分析
Directory.GetFiles メソッドがアクセスできないディレクトリに遭遇すると、UnauthorizedAccessException 例外をスローします。残念ながら、この例外をキャッチする前にメソッドは失敗しており、回復できません。
解決策: ディレクトリを 1 つずつ検出します
この問題を解決するには、ディレクトリ ツリー全体を再帰的に検索するのではなく、一度に 1 つのディレクトリを調査することをお勧めします。こうすることで、ディレクトリごとに例外をキャッチして処理できるため、プログラムの早期終了を回避できます。
実装例
以下は、ディレクトリ ツリーを反復処理し、アクセスが拒否されたディレクトリからファイルを除外して、ファイル パスをリストに追加するメソッドの例です。
<code class="language-csharp">private static void AddFiles(string path, IList<string> files)
{
try
{
foreach (string file in Directory.GetFiles(path))
{
files.Add(file);
}
foreach (string subdirectory in Directory.GetDirectories(path))
{
AddFiles(subdirectory, files);
}
}
catch (UnauthorizedAccessException ex)
{
// 忽略无法访问的目录,继续处理其他目录
}
}</code> の使用を回避し、より明確で読みやすい ToList().ForEach() ループを使用することで、コードの保守性が向上しています。 foreach
以上がDirectory.GetFiles を使用するときに UnauthorizedAccessException を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。