元のファイルをロックしたまま、ファイルをロック、コピー、コピーを変更、元のファイルにコピーを保存する方法についてサポートが必要です。
現在の流れは次のとおりです。ユーザーがファイルを開き、アプリケーションがそれを一時フォルダーにコピーし、元のファイルを次の行でロックします。
_lockStream = new FileStream(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
次に、一時ファイルを元のファイルに保存する場合、現在、次のルーチンを使用しています (宛先 = _lockStream、およびソース = 一時ファイルのストリーム)。
public static void Copy(Stream source, Stream destination, int bufferSize)
{
int readed = 0;
byte[] buffer = new byte[bufferSize];
destination.SetLength(source.Length);
destination.Position = 0;
while ((readed = source.Read(buffer, 0, buffer.Length)) > 0)
{
destination.Write(buffer, 0, readed);
}
destination.Flush();
}
代わりに File.Copy を使用したいのですが、アプリケーションによってファイルがロックされていても、ロックされたファイルで動作させる方法がわかりません。さらに悪いことに、私の方法は安全ではありません。アプリケーションまたはシステムが途中でクラッシュすると、元のファイルが破損します。より正しいアプローチは、同じフォルダーにコピーしてから移動する (または単に移動する) ことだと思いますが、元のファイルのロックを保持する方法がわかりません。
そこで、安全のために、ファイル ロックを解除し、File.Copy を使用して、再度ロックを取得します。動作しますが、数ミリ秒間ファイルのロックが解除され、他のプロセスによってロックされる可能性があります。
そのようなことをする最善の方法は何ですか?