1

私は DocumentStore (ネットワーク共有を表す高級用語) と、ストアにコピーされたドキュメントに関連するエントリを保持するデータベースを持っています。ファイル名とパーティション化されたディレクトリ構造にデータベース行の自動生成 (int) ID を使用します (たとえば、ID=4433 は最終的に '\004\433\0000004433.xxx' に配置されます)。

ファイルのコピー中にデータベースに何らかのロックを保持することは明らかにできませんが、どちらがより良い戦略であるかはわかりません。

a) データベースに行を追加して ID を取得し (おそらく InProgress フラグを使用)、ファイルをコピー先にコピーし、コピーが成功したら行を再度更新してフラグをクリアします。

b) 共有のルートにある一時ファイル名にファイルをコピーします。それが完了したら、新しい行をデータベースに挿入して ID を取得し、File.Move を呼び出して一時ファイルを正しい宛先に移動します。ファイルの挿入/移動がトランザクションで実行された場合、失敗すると、挿入がロールバックされ、他のユーザーには表示されません。

(b) 本当にコピー/削除ではなく移動であれば問題ないはずですが、これを行っても安全でしょうか?

4

2 に答える 2

0

移動は、コピー/削除と同じくらい安全です。

ソースと宛先が異なるボリューム上にある場合、移動はソースから削除されません。コピーするか、コピーしないかのどちらかです。

Move = Copy if volume are different. (File.Delete is required to delete source file).  
Move = Copy + Delete is volume is same.

上記以外は、移動/移動+削除またはコピー+削除のどちらを使用しても違いはありません。

于 2012-11-12T14:11:33.497 に答える
0

移動は完全に安全です。ネットワーク共有に移動するときのコピー/削除と大差ありません。

于 2012-11-12T14:06:04.130 に答える