SQLServerのバックアップを作成するプログラムがあります。実行するたびに、バックアップファイルが作成されます。しかし、ファイルは蓄積されています。
バックアップディレクトリのサイズをチェックするメソッドを追加したいのですが、サイズがしきい値サイズよりも大きくなると、最後のファイルが削除されます。
どうすればこれができるか知っていますか?
どうもありがとう!
SQLServerのバックアップを作成するプログラムがあります。実行するたびに、バックアップファイルが作成されます。しかし、ファイルは蓄積されています。
バックアップディレクトリのサイズをチェックするメソッドを追加したいのですが、サイズがしきい値サイズよりも大きくなると、最後のファイルが削除されます。
どうすればこれができるか知っていますか?
どうもありがとう!
リスト内のすべてのファイルを追加し、CompareToをFileInfoCreationTimeと組み合わせて使用してリストを並べ替えます。次に、ディレクトリに残したいファイルの数に基づいて、それに応じてファイルを削除します。
ディレクトリファイルの計算に関しては、FileInfo Lengthを使用して合計サイズの変数をインクリメントしながら、ディレクトリ内のすべてのファイルを反復処理するだけです。
DirectoryInfoと少しのLinqを使用するのは簡単な作業です
public void RemoveLastFile(string folderPath, long dirSizeLimit)
{
long size = 0;
var files = new DirectoryInfo(folderPath).GetFiles();
files.Sum(f => size += f.Length);
if(size > dirSizeLimit)
{
var sorted = files.OrderBy(f => f.LastWriteTime);
File.Delete(sorted.First().FullName);
}
}
もちろん、これは一例です。エラーチェックを少し追加する必要があります。
PS私はFileInfoクラスのプロパティLastWriteTimeを使用しましたが、あなたの場合(バックアップファイル)はCreationTimeと同等だと思います。