|
分類:[C#]
お世話になっております。
古い日付名ファイルの削除ロジックについてお知恵を貸して頂ければ幸いです。
指定ディレクトリにあるデータをバックアップしております。 例: 20101201_1.mdb 20101201_2.mdb 20101202_1.mdb 20101202_2.mdb 20101203_3.mdb 20101204_1.mdb 20101205_1.mdb …
ファイル名は[YYYYMMDD_x.mdb]形式で、MDBファイルに約2Gの制限があることから2Gを超える場合は、
分割ファイルとしてxの箇所が1からはじまりインクリメントしていく形です。
バックアップファイルの保持日数を設定で指定出来るようにしております。
例えば保持数を2日とした場合は、最新の日付から2日分を保持しますので、例の場合ですと、 20101204_1.mdb 20101205_1.mdb が残り、その他は全て削除される仕様です。
この仕様を実現するにあたり、良い方法はありませんでしょうか?
現状僕の乏しい知識で考えているロジックは、 1.バックアップ先指定ディレクトリをワイルドカードを使用してファイル一覧取得 Directory.GetFiles(strSaveDir, "????????_*.mdb", SearchOption.TopDirectoryOnly); 2.取得したファイル名一覧をループで回して先頭8文字(YYYYMMDD)部分を取得 3.先頭8文字(YYYYMMDD)部分ユリウス値(LONG)に変換 →日付の大小比較方法が分からないため年月日をLONGに直して比較しようとしています。 良い方法があればご教授願います。 4.先頭8文字(YYYYMMDD)部分ユリウス値(LONG)に変換した値をArrayListへ格納してソート(降順) 5.バックアップファイルの保持日数になるまでfor分をデクリメントしながらArrayListの中身を削除 →削除する対象は残すファイル ArrayListに残ったファイルを削除するため 6.残ったArrayList内のユリウス値(LONG)を年月日に戻す 7.6で戻したファイル一覧を削除
まだ実装しておりませんが、どう考えても効率が悪そうなのでもっと良い方法があればご教授願いたい次第です。
よろしくお願い致します。
--- VS2010 .Net2.0 Win32アプリC#での実装
|