はじめに
プログラムを制作しているときには、できる限りLogを残しておきたいと思っています。製品になったときにちょっと気の足しにでもなりますからね。しかし、何でもかんでもLogを残しておくと結構なメモリを食ってしまいます。Log出力用のライブラリは圧縮機能が装備されていたりしますが、十数年使用される装置ではLogサイズの肥大化が問題になります。
そこで、一番最初に考えるのは古いLogデータなど、たとえば1週間以上前のファイルを削除したいことが多々あります。パッと思いつかなかったので、忘備録として残しておきます。
開発環境
コード
一週間以上前のファイルを消去する
int LIFE_SPAN = 7;
String DataPath = "<削除したいファイルがあるフォルダ>";
DirectoryInfo di = new DirectoryInfo(DataPath);
var target = DateTime.Today.AddDays(-LIFE_SPAN);
foreach(FileInfo fi in di.GetFiles())
{
if(fi.LastWriteTime < target)
{
fi.Delete();
}
}
10ファイル以上になったら一番古いファイルを削除
static List<string> GetAllFileFromDirectory(String dn)
{
List<String> fileList = Directory.GetFiles(dn, "*", SearchOption.AllDirectories)
// フォルダ内の全ファイルを取得
.OrderBy(filePath => File.GetLastWriteTime(filePath).Date)
// 日付順に降順でソート
.ThenBy(filePath => File.GetLastWriteTime(filePath).TimeOfDay)
// 時間順にソート
.ToList();
return fileList;
}
// こんな感じで使います
int fCnt = Directory.GetFiles(_path, "*", SearchOption.AllDirectories).Length;
if(fCnt > 10)
{
File.Delete(GetAllFileFromDirectory(_path)[0]);
}