2

私は現在、私たちの のアーカイブ ファイルをコピーしています。oracle server私が防止しているのは、コピー中にファイル サーバーがファイルを更新しようとしたときにエラーが発生することです。

最初に私は試しました

File.Copy(source, Destination, true);

しかし、このメソッドはファイルをロックしているようで、サーバーはログにエラーをスローします:

OSD-04002: unable to open file
O/S-Error: (OS 32) The process cannot access the file because it is being used by another process.

方法を次のように変更します

FileStream rStream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

しかし、FileShare でテスト プログラムを使用してファイルを開こうとすると、. 現在、別のプロセスがファイルをロックしているというエラーもスローされます。

別のプロセスがファイルにアクセス/書き込みしたい場合、ファイルを手放したり解放したりすることは可能ですか?

4

1 に答える 1

1

どうですか

var stream = System.IO.File.Open(
                 source, System.IO.FileMode.Open, System.IO.FileAccess.Read
             );

これはファイルをロックしますか?

最善の解決策は、VSS を使用してロックを防ぐことです (サーバーは Windows ボックスですよね?)

  • スナップショットを作成する
  • スナップショットからファイルをコピーする
  • スナップショットを削除

これは.NETで自動化できます

http://www.codeproject.com/Articles/22745/Volume-Shadow-Copies-from-NET

于 2012-06-21T09:02:57.797 に答える