11


1

.NETでのアトミックファイルコピー

System.IO.File.Copy(…​)関数を使用してファイルをコピーするサーバーアプリを構築しています。 私のファイルはかなり大きくなる可能性があるため、マシンがクラッシュした場合、コピー中に発生する可能性がかなりあります。

サービスを再起動した後、コピータスクを取得して続行できるはずです。 コピーが正常に完了したか、サーバーのクラッシュによって中断されたかを検出するにはどうすればよいですか?

私の現在の計画は、ファイルを一時的な名前にコピーし、コピーが完了したら最終的な名前に名前を変更することです。 このようにして、ファイルの命名は、クラッシュの際に状態情報を伝えることができます。

良い/良い提案はありますか?

編集:ターゲットOSはWin2003であるため、トランザクションNTFSは利用できません

4 Answer


10


他の人は、Vista以降で展開する場合は問題ないトランザクションNTFSを提案しています。 XP(またはそれ以前)をサポートする必要がある場合は、一時ファイルとそれに続く移動(名前変更)が最適なソリューションです。

この同様の質問に対する答えは、より多くの情報を提供します:https://stackoverflow.com/questions/774098/atomicity-of-file-move[Atomicity of File.Move]


2


http://en.wikipedia.org/wiki/Transactional_NTFS [トランザクションファイルシステム]。


2


Windowsの新しいバージョンでは、http://msdn.microsoft.com/en-us/magazine/cc163388.aspx [transactions]を使用できます。


1


Windows Server 2003のバックグラウンドインテリジェント転送サービスをご覧ください。 ジョブのメカニズムを提供し、再起動後でも一時停止および再開できます。

これを.NETで使用する方法の例をいくつか示します。