ファイルに書き込むプログラムを変更できない場合、オプションは多少制限されます。考えられる可能性は次の2つです。
ファイルを排他的に開き、ループでコピーします。
using (var fin = File.Open(InputFilename, FileMode.Open, FileAccess.Read, FileShare.None))
{
using (var fout = File.OpenWrite(OutputFilename))`
{
int bytesRead = 0;
var buffer = new byte[65536];
while ((bytesRead = fin.Read(buffer, 0, buffer.Length)) > 0)
{
fout.Write(buffer, 0, bytesRead);
}
}
}
読み取り用にファイルを開こうとしたときに、Log4Net が書き込み用にファイルを開いている場合にスローされる例外を処理するコードを記述する必要があります。そのコードは、少し待ってから再試行する必要があります。
ここでの潜在的な欠点は、Log4Net がファイルに書き込めない場合 (排他アクセス用に開かれているため)、例外をスローする可能性があることです。Log4Net が排他的アクセスのためにファイルを開くことを好まない場合は、...
ファイルの名前を変更するだけで、自由にコピーできます。名前を変更しようとしたときに Log4Net がファイルを開いている場合、コードは例外をスローします。再試行できます。名前を変更した後で Log4Net がファイルに書き込もうとすると、Log4Net はその名前で新しいファイルを作成します。
他のオプションは表示されません。
ところで、20 MB は実際には大きなファイルではありません。最新のネットワーク速度では、1 秒もかからずにコピーできるはずです。