ホームページ >バックエンド開発 >C++ >Directory.GetFiles を使用してディレクトリを走査するときに UnauthorizedAccessException を処理するにはどうすればよいですか?

Directory.GetFiles を使用してディレクトリを走査するときに UnauthorizedAccessException を処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-07 15:06:44893ブラウズ

How Can I Handle UnauthorizedAccessException When Using Directory.GetFiles to Traverse Directories?

Directory.GetFiles がディレクトリ

を走査するときに発生する UnauthorizedAccessException 例外を適切に処理します。

ファイルおよびディレクトリの操作を実行するとき、Directory.GetFiles メソッドを使用すると、UnauthorizedAccessException 例外が発生する場合があります。この例外は、ユーザーが適切な権限を持たないディレクトリにメソッドがアクセスしようとしたときに発生します。

この問題を解決するには、ディレクトリ ツリー全体を走査するのではなく、ディレクトリを 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>

このメソッドでは、UnauthorizedAccessException がキャプチャされて正常に処理されるため、プログラムは実行を継続し、場合によっては他のアクセス可能なファイルを検出できるようになります。反復はディレクトリ階層全体を続行し、それ自体を再帰的に呼び出してサブディレクトリを探索します。

この手法を使用すると、アクセス拒否エラーによる Directory.GetFiles メソッドの終了を回避し、ディレクトリ トラバーサル プロセスの制御を維持できます。 このメソッドでは、foreach の代わりに ToList().ForEach() ループを使用するため、より読みやすく効率的になります。

以上がDirectory.GetFiles を使用してディレクトリを走査するときに UnauthorizedAccessException を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。