C#でデータ保持期間を過ぎたファイルを削除する方法

2024年9月20日金曜日

C#

t f B! P L

概要

ファイルの更新日付が XX日 過ぎたファイルを削除する。システム開発でありがちの処理ですね。
この記事では、C#で指定されたフォルダ内のファイルを対象に、データ保持期間(日数ベース)を過ぎたファイルを自動で削除するコードの実装方法を紹介します。

実装の流れ

  1. 指定されたフォルダ内のすべてのファイルを取得する。
  2. 各ファイルの最終更新日を確認し、保持期間を過ぎているかどうかを判定する。
  3. 保持期間を過ぎたファイルを削除する。

この基本的なフローに従って実装していきます。

コードの実装

using System;
using System.IO;

public class FileCleaner
{
    // 保持期間を日数で設定(例:30日)
    private static readonly int RetentionDays = 30;

    public static void Main(string[] args)
    {
        // フォルダのパスを指定(例:C:\Temp\Logs)
        string folderPath = @"C:\Temp\Logs";

        // フォルダが存在するかを確認
        if (Directory.Exists(folderPath))
        {
            DeleteOldFiles(folderPath, RetentionDays);
        }
        else
        {
            Console.WriteLine($"指定されたフォルダは存在しません: {folderPath}");
        }
    }

    // 指定されたフォルダ内で保持期間を過ぎたファイルを削除するメソッド
    public static void DeleteOldFiles(string folderPath, int retentionDays)
    {
        // フォルダ内のすべてのファイルを取得
        string[] files = Directory.GetFiles(folderPath);

        foreach (var file in files)
        {
            try
            {
                // ファイルの最終更新日時を取得
                DateTime lastModified = File.GetLastWriteTime(file);

                // 現在の日付から保持期間を引いた日付
                DateTime retentionDate = DateTime.Now.AddDays(-retentionDays);

                // ファイルの最終更新日時が保持期間を過ぎている場合は削除
                if (lastModified < retentionDate)
                {
                    File.Delete(file);
                    Console.WriteLine($"削除しました: {file}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ファイルの削除に失敗しました: {file} - エラー: {ex.Message}");
            }
        }
    }
}

コードの解説

特に説明する必要もないかと思いますが、一応。

  1. 保持期間の設定
    RetentionDays という変数に保持期間の日数を設定しています。この例では30日としています。

  2. フォルダのパス指定
    folderPath には、対象とするフォルダのパスを指定します。Directory.Exists() でフォルダが存在するか確認し、存在しない場合はエラーメッセージを表示します。

  3. ファイルの取得
    Directory.GetFiles() を使用して、指定されたフォルダ内のすべてのファイルを取得します。このメソッドは、ファイルのパスを文字列の配列として返します。

  4. ファイルの最終更新日時の取得
    各ファイルについて、File.GetLastWriteTime() メソッドを使って最終更新日時を取得します。この値を保持期間の日付と比較します。

  5. 保持期間を過ぎたファイルの削除
    DateTime.Now.AddDays(-retentionDays) によって現在の日付から保持期間を引いた日付を計算し、それとファイルの最終更新日時を比較します。もし保持期間を過ぎていれば、File.Delete() メソッドでファイルを削除します。

  6. 例外処理
    削除処理中に例外が発生した場合には、そのファイル名とエラーメッセージを出力します。これにより、削除できなかったファイルの確認が可能になります。

サブフォルダのファイルも削除する場合

Directory.GetFiles() の第2引数に SearchOption.AllDirectories を指定すると、再帰的にすべてのファイルを取得できます。

string[] files = Directory.GetFiles(folderPath, "*", SearchOption.AllDirectories);

ファイルのサイズが大きいファイルだけ削除する

サイズに応じた処理を行いたい場合、FileInfo クラスを使ってファイルサイズを取得し、条件に応じて処理を行うことができます。

FileInfo fileInfo = new FileInfo(file);
long fileSizeInBytes = fileInfo.Length;

まとめ

古くなったファイルを削除することで、不要なファイルを定期的に整理しディスク容量を確保できます。ファイルの管理を自動化することは、システム運用の工数削減に繋がります。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ