ソースコードはこちら
https://github.com/mi3w2a1/incremental-backup

増分バックアップは最初にすべてのデータをバックアップし、その後は変更・追加のあった箇所だけバックアップする方法です。

差分バックアップとの違いは、差分バックアップが初回フルバックアップから変更・追加のあった箇所を毎回バックアップすることに対して、増分バックアップは前回おこなわれたバックアップ(初回ではなく「前回」というのがポイント)から変更・追加のあった箇所のみバックアップすることです。

そのため増分バックアップのほうが実際にバックアップされるデータを小さくすることができます。反面、復元するときは複数のデータブロックをつなぎ合わせる必要があるため作業が複雑になるというデメリットがあります。

実際にバックアップする処理は次回に回して、今回はどの部分をどこにバックアップするのかを設定するまでをつくります。

BackupFolderInfoクラスはバックアップ元フォルダのパスとバックアップ先フォルダのパスを記憶するためのクラスです。

Configクラスは設定を保存するためのクラスです。

アプリケーションが開始されたらリストビューコントロールの初期化と設定の読み込みをおこないます。

リストビューコントロールにはバックアップ元とバックアップ先の一覧が表示されます。またこのリストビューコントロールはひとつのアイテムしか選択できません。

設定のファイルはApplication Dataフォルダ内に保存します。ファイルが存在しないということは初めて起動されたときです。その場合はなにもおこないません。

バックアップ先またはバックアップ先が変更されたときは、SaveConfig()メソッドを呼び出してその設定を保存します。

メニューの[設定] ⇒ [フォルダを登録]が選択されたら設定のためのダイアログを表示させます。そして有効なパスが入力された状態でダイアログが閉じられたら、設定を保存するとともに登録されたフォルダをリストビューに表示させます。

バックアップ元フォルダとバックアップ先のフォルダのパスが同じだったり、バックアップ元フォルダのなかにバックアップ先フォルダを指定した場合、存在しないパスを指定した場合はエラーを示すメッセージボックスを表示します。

バックアップフォルダを設定するためのFormFolderクラスは以下のようになっています。

バックアップ設定のためのダイアログ

テキストボックスは自作したFilePathTextBoxクラスを使用しています。

FilePathTextBoxクラスはここで解説しています。

ファイルをドラッグするとパスが入力されるテキストボックス 自作コントロール

メニューの[設定] ⇒ [登録内容を変更]が選択されたら設定のためのダイアログを表示させます。そのときに現在の設定が表示されるようにしています。有効なパスが入力された状態でダイアログが閉じられたら、設定を保存するとともに登録されたフォルダをリストビューに表示させます。不正なパスが入力された状態で閉じられた場合はエラーを示すメッセージボックスを表示させます。

メニューの[設定] ⇒ [登録内容を削除]が選択されたら登録を解除するバックアップフォルダの情報を表示して確認を求めるメッセージボックスを表示させます。[OK]がクリックされたら登録内容を削除します。