11

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

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

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

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

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

4

4 に答える 4

11

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

この同様の質問への回答は、より多くの情報を提供します: File.MoveのAtomicity

于 2010-02-08T14:39:33.140 に答える
2

トランザクション ファイル システム

于 2010-02-08T14:29:56.433 に答える
2

新しいバージョンの Windows では、トランザクションを使用できます。

于 2010-02-08T14:30:47.377 に答える
1

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

以下に、.NET で使用する方法のサンプルをいくつか示します。

.NET とバックグラウンド インテリジェント転送サービス API を使用して自動更新アプリを作成する

SharpBITS.NET - BITS API のラッパー

于 2010-02-08T16:37:48.007 に答える