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

Directory.GetFiles を使用するときに UnauthorizedAccessException を処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-07 15:18:40
オリジナル
584 人が閲覧しました

How Can I Handle UnauthorizedAccessException When Using Directory.GetFiles?

アクセス制限により 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート