ホームページ >バックエンド開発 >C++ >C#のアクセス拒否の例外を無視しながら、ディレクトリ構造でファイルを安全に処理するにはどうすればよいですか?

C#のアクセス拒否の例外を無視しながら、ディレクトリ構造でファイルを安全に処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-27 23:01:11575ブラウズ

How Can I Safely Process Files in a Directory Structure While Ignoring Access Denied Exceptions in C#?

Directory.GetFiles() を使用してディレクトリを安全に移動します

C# を使用してディレクトリを移動すると、保護されたフォルダーが原因でアクセス拒否例外が発生することがよくあります。これらの例外によってプログラムが中断されるのを防ぐために、アクセスできないディレクトリを適切に無視して、アクセス可能なファイルの処理を続行する方法を検討してみましょう。

チャレンジ

Directory.GetFiles() を使用する標準メソッドは、アクセスできないフォルダーに遭遇すると突然例外をスローし、それ以降の処理を停止します。

再帰的ソリューション

例外をスローする AllDirectories パラメーターに依存する代わりに、再帰を手動で実装します。これには、一度に 1 つのディレクトリを繰り返し、そのファイルへのアクセスを試み、サブディレクトリを再帰的に探索することが含まれます。

<code class="language-csharp">using System;
using System.IO;

public static class Program
{
    public static void Main()
    {
        string path = ""; // 获取目录路径
        ProcessAllFiles(path, ProcessFile);
    }

    private static void ProcessFile(string path) { /* 在此处添加文件处理代码。 */ }

    private static void ProcessAllFiles(string folder, Action<string> fileAction)
    {
        try
        {
            foreach (string file in Directory.GetFiles(folder))
            {
                fileAction(file);
            }

            foreach (string subDir in Directory.GetDirectories(folder))
            {
                ProcessAllFiles(subDir, fileAction);
            }
        }
        catch (Exception ex)
        {
            // 处理或忽略异常(例如,将其记录下来以便日后查看)。  考虑记录异常类型和路径信息。
            Console.WriteLine($"Error processing directory '{folder}': {ex.Message}");
        }
    }
}</code>

このコードは、ディレクトリ構造を繰り返し探索し、アクセスできないフォルダーを無視し、アクセス可能なファイルを続行します。 catch ブロックをカスタマイズして、例外を飲み込んだり、例外のログ記録などのカスタム処理を実行したりできます。 改良されたコードには、発生する可能性のある例外を処理し、例外メッセージとエラーが発生したフォルダー パスを含むエラー メッセージを出力するための try-catch ブロックが含まれています。

結論

カスタム再帰を実装すると、アクセス拒否例外を無視して、ディレクトリ構造内のファイルにアクセスし続けることができます。これにより、保護されたフォルダーやアクセスできないフォルダーを扱う場合でも、より堅牢でユーザーフレンドリーなファイル処理が可能になります。

以上がC#のアクセス拒否の例外を無視しながら、ディレクトリ構造でファイルを安全に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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