概要
ファイルの更新日付が XX日
過ぎたファイルを削除する。システム開発でありがちの処理ですね。
この記事では、C#で指定されたフォルダ内のファイルを対象に、データ保持期間(日数ベース)を過ぎたファイルを自動で削除するコードの実装方法を紹介します。
実装の流れ
- 指定されたフォルダ内のすべてのファイルを取得する。
- 各ファイルの最終更新日を確認し、保持期間を過ぎているかどうかを判定する。
- 保持期間を過ぎたファイルを削除する。
この基本的なフローに従って実装していきます。
コードの実装
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}");
}
}
}
}
コードの解説
特に説明する必要もないかと思いますが、一応。
-
保持期間の設定
RetentionDays
という変数に保持期間の日数を設定しています。この例では30日としています。 -
フォルダのパス指定
folderPath
には、対象とするフォルダのパスを指定します。Directory.Exists()
でフォルダが存在するか確認し、存在しない場合はエラーメッセージを表示します。 -
ファイルの取得
Directory.GetFiles()
を使用して、指定されたフォルダ内のすべてのファイルを取得します。このメソッドは、ファイルのパスを文字列の配列として返します。 -
ファイルの最終更新日時の取得
各ファイルについて、File.GetLastWriteTime()
メソッドを使って最終更新日時を取得します。この値を保持期間の日付と比較します。 -
保持期間を過ぎたファイルの削除
DateTime.Now.AddDays(-retentionDays)
によって現在の日付から保持期間を引いた日付を計算し、それとファイルの最終更新日時を比較します。もし保持期間を過ぎていれば、File.Delete()
メソッドでファイルを削除します。 -
例外処理
削除処理中に例外が発生した場合には、そのファイル名とエラーメッセージを出力します。これにより、削除できなかったファイルの確認が可能になります。
サブフォルダのファイルも削除する場合
Directory.GetFiles()
の第2引数に SearchOption.AllDirectories
を指定すると、再帰的にすべてのファイルを取得できます。
string[] files = Directory.GetFiles(folderPath, "*", SearchOption.AllDirectories);
ファイルのサイズが大きいファイルだけ削除する
サイズに応じた処理を行いたい場合、FileInfo
クラスを使ってファイルサイズを取得し、条件に応じて処理を行うことができます。
FileInfo fileInfo = new FileInfo(file);
long fileSizeInBytes = fileInfo.Length;
まとめ
古くなったファイルを削除することで、不要なファイルを定期的に整理しディスク容量を確保できます。ファイルの管理を自動化することは、システム運用の工数削減に繋がります。
0 件のコメント:
コメントを投稿