【C#】フォルダを再帰的に検索して特定の拡張子を持つファイルを処理

C#

C#には便利な機能があり、自分で関数の再帰呼び出し処理を書かなくても配下のフォルダ内すべてのファイルを取得す処理を書くことができます。でも、それだと味気ないので、自前で再帰処理を書く例も示します。

サンプルコード

指定されたフォルダ内を再帰的に検索して、特定の拡張子(例:.txt)を持つファイルに対して処理を行うサンプルコードです。

1.Directory.GetFilesメソッドを使用

オプションSearchOption.AllDirectoriesを指定することでメソッド内で再帰的にファイル取得をおこなってくれます。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string folderPath = @"C:\path\to\your\directory";
        ProcessFiles(folderPath);
    }

    static void ProcessFiles(string folderPath)
    {
        try
        {
            // 指定されたフォルダ内のすべてのファイルを取得
            string[] files = Directory.GetFiles(folderPath, "*.txt", SearchOption.AllDirectories);

            foreach (var file in files)
            {
                // ★ここに目的の処理を書く
                Console.WriteLine(file);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラーが発生しました: " + ex.Message);
        }
    }
}

2.自分で関数の再帰呼び出し処理を実装する

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string folderPath = @"C:\path\to\your\directory";
        ProcessDirectory(folderPath);
    }

    static void ProcessDirectory(string folderPath)
    {
        try
        {
            // 指定されたフォルダ内のすべてのファイルを取得
            string[] files = Directory.GetFiles(folderPath, "*.txt");
            foreach (var file in files)
            {
                // ★ここに目的の処理を書く
                Console.WriteLine(file);

            }

            // 指定されたフォルダ内のすべてのサブフォルダを取得し、再帰的に処理
            string[] subDirectories = Directory.GetDirectories(folderPath);
            foreach (var directory in subDirectories)
            {
                ProcessDirectory(directory);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("エラーが発生しました: " + ex.Message);
        }
    }
}

タイトルとURLをコピーしました