1. 需要
突然の停電によるデータの損失を防ぐために、文書を開いたときに定期的に自動バックアップが行われます。
2. プロセス
2.1 ファイル構造
- ターゲットファイル ターゲット。
- バックアップ ファイル Backup_X。
2.2 オープニングフェーズ
- ターゲット ファイルが存在するかどうかを確認します。存在しない場合は、2 番目のステップに進んで新しいターゲット ファイルを作成します。存在する場合は、3 番目のステップに進んで続行します。
- ターゲット ファイルを作成し、ステップ 3 に進みます。
- バックアップ ファイル 1 が存在するかどうかを確認します。存在する場合は、停電が発生して保存されなかったことを意味します。ファイルを復元して 4 番目の手順に進むかどうかを尋ねるメッセージが表示されます。存在しない場合は、新しいバックアップ ファイル 1 を作成し、対象ファイルのデータをバックアップ ファイル 1 に書き込み、手順 5 に進みます。
- 復元すると、バックアップ ファイル 1 の内容がターゲット ファイルに上書きされ、その後定期的にバックアップ ファイル 1 にレコードが書き込まれます。復元されない場合は、ターゲット ファイルの内容がバックアップ ファイル 1 に上書きされ、その後定期的にレコードがバックアップ ファイル 1 に書き込まれ、手順 5 に進みます。
- このとき、ターゲットファイルとバックアップファイル 1 の初期状態を処理してから、スケジュールされたバックアップ状態に入る必要があります。
2.3 スケジュールされたバックアップ段階
- タイミングが来ると、対象ファイルのデータが分割されてバックアップファイル1に保存されます。
2.4 終了フェーズ
- 対象ファイル操作を終了する前に、対象ファイルのデータを保存してください。
- バックアップ ファイルを閉じて削除します。
- アプリケーションを閉じます。
3. 機能
3.1存在する
ファイルが存在するかどうかを確認してください。
この関数は次のように使用されます。
uint32_t NewFileOpen(char* name)
{
QFile file(name);
if(file.exists())
{
func1();
}
else
{
func2();
}
}
3.2追加
スプライスされたバックアップ ファイルのファイル名。
この関数は次のように使用されます。
QString BackupFileName(name);
BackupFileName.append("-backup");
QFile BackupFile(BackupFileName);
3.3名前の変更
ファイル名を変更します。
この関数は次のように使用されます。
BackupFile.rename(BackupFileName);
3.4開く
ファイルが存在しない場合は、ファイルが開かれて作成されます。
この関数は次のように使用されます。
file.open(QIODevice::ReadWrite|QIODevice::Text);
3.5閉じる
ファイルが閉じられています。
この関数は次のように使用されます。
file.close();
4. まとめ
スケジュールされたファイルをバックアップするというアイデアは Microsoft Word から生まれました。私はそれを簡単に使用できるようにモジュールにカプセル化したいと考えています。ソース コードはまだ入手できず、デバッグ中です。