定期的に、PrintWriterを使用して指定された場所にある xml ファイルにデータベースからのデータを書き込んでいます。xml の生成中に問題が発生した場合、xml ファイルが残らないため、現在の実行で xml の生成が完全に完了するまで、既存の xml ファイルを削除したくありません。現在の実行でファイルの生成/書き込みが完全に完了するまで、現在のファイルの削除が保留されるこのシナリオの処理に関する推奨事項をいただければ幸いです。
2 に答える
新しい XML を一時ファイルに書き込み、古いファイルを移動/名前変更してから、一時ファイルを実際のファイル名に移動/名前変更し、最後に古いファイルを削除することができます。そうすれば、常にファイルが配置され、新しいファイルが配置されるまで古いファイルを削除しません。
このようなことを行う最も一般的な方法は、元の XML ファイルの名前を別のファイル名に変更することです。
シンプルバージョン:
If 'file.xml' exists Then
If 'file.xml.bak' exists Then
remove 'file.xml.bak'
Fi
rename 'file.xml' as 'file.xml.bak'
Fi
generate XML to 'file.xml'
このバージョンの欠陥は、名前の変更後にアプリケーション (またはシステム) が失敗した場合、次にそのアプリケーションを実行したときに、不完全または欠落している'file.xml'
. いずれかのシナリオが検出された場合に、アプリケーションでバックアップ ファイルの使用を試みることで、これに対処できます。
または、3 番目のファイルを導入することもできます。'file.xml.new'
たとえば、書き込みが成功した後にアプリケーションを生成して名前を変更します。状況によっては、欠落に対処する'file.xml'
必要があります。トランザクション ファイル システムを使用していない限り、これは避けられません。ただし、障害が発生するまでの時間は短くなるため、現在のファイルとバックアップ ファイルのコピーを常に完了しておく必要があります。