はじめに
プログラムを制作しているときには、できる限りLogを残しておきたいと思っています。製品になったときにちょっと気の足しにでもなりますからね。しかし、何でもかんでもLogを残しておくと結構なメモリを食ってしまいます。Log出力用のライブラリは圧縮機能が装備されていたりしますが、十数年使用される装置ではLogサイズの肥大化が問題になります。
そこで、Log保存しているフォルダサイズの最大値を決めておき、最大値を超えたら古いファイルを削除していこうと思います。
.NETにはフォルダサイズを取得する関数がないようなので、実装の必要がありそうです。
この投稿ではフォルダサイズを取得する機能について記述しておきます。
開発環境
コード
public static long GetDirectorySize(DirectoryInfo directoryInfo)
{
long size = 0;
// フォルダ下のファイルの合計サイズを計算する
forearch(FileInfo fi in directoryInfo.GetFiles())
{
size += fi.Length;
}
// サブフォルダの計算をするために再帰呼び出し
foreach(DirectoryInfo di in directoryInfo.GetDirectories())
{
size += GetDirectorySize(di);
}
return size;
}
// "C:\temp\Log"フォルダのサイズを取得する
DirectoryInfo di = new DirectoryInfo(@"C:\temp\Log");
long dir_size = GetDirectorySize(di);
サブフォルダが多かったり深かったりすると、時間が掛かりそうですが…。