犬わらノート

ゲームを作ったり、遊んだり

[C#] ファイルを世代番号付きでバックアップする

ファイルのバックアップを取る C# プログラムのメモ

Util.BackupFile(@"c:\data.txt", 3, ".bk");

と呼び出した場合、"c:\data.txt" を "c:\data.txt.bk1" のような名前で 3世代分 バックアップを取ります。


ソース

using System;
using System.IO;

class Util
{
    /// <summary>
    /// ファイルのバックアップ
    /// </summary>
    /// <param name="path">バックアップするファイル</param>
    /// <param name="maxBackup">作成するバックアップファイルの数</param>
    /// <param name="backupSuffix">バックアップファイル名の末尾 (ex: ".bk")</param>
    public static bool BackupFile(string path, int maxBackup, string backupSuffix)
    {
        if (!File.Exists(path) || maxBackup < 1) { return false; }

        // 古いバックアップファイル名の変更 (ex: .bk2 -> .bk3 / .bk1 -> .bk2 )
        {
            for (int num = maxBackup; num > 0; num--)
            {
                string backup = path + backupSuffix + num;
                string backupDest = path + backupSuffix + (num + 1);
                if (File.Exists(backup)) { File.Move(backup, backupDest); }
            }
            string overMax = path + backupSuffix + (maxBackup + 1);
            if (File.Exists(overMax)) { File.Delete(overMax); }
        }

        // ファイルのバックアップ (ex: file.txt -> file.txt.bk1)
        {
            string backup = path + backupSuffix + "1";
            File.Copy(path, backup);
        }

        return true;
    }
}


頻繁に更新するファイルをいちいち手でバックアップするのが面倒な場合に。