36

別のプロセスが使用しているファイルを同時にコピーすることはできますか?

次のコードを使用してファイルをコピーしようとすると、例外が発生するため、質問します。

 System.IO.File.Copy(s, destFile, true);

発生する例外は次のとおりです。

別のプロセスで使用されているため、プロセスはファイル 'D:\temp\1000000045.zip' にアクセスできません。

新しいファイルを作成するのではなく、コピーまたは削除したいだけです。これは可能ですか?

4

7 に答える 7

42

例 (注: 2 つの Google 検索結果を組み合わせただけです。小さなエラーを修正する必要があるかもしれません ;))

重要な部分はFileShare.ReadWrite、FileStream を開くときです。

Excelがまだ開いていてファイルをブロックしている間に、同様のコードを使用してExcelドキュメントを開いて読み取ります。

using (var inputFile = new FileStream(
    "oldFile.txt",
    FileMode.Open,
    FileAccess.Read,
    FileShare.ReadWrite))
{
    using (var outputFile = new FileStream("newFile.txt", FileMode.Create))
    {
        var buffer = new byte[0x10000];
        int bytes;

        while ((bytes = inputFile.Read(buffer, 0, buffer.Length)) > 0)
        {
            outputFile.Write(buffer, 0, bytes);
        }
    }
}
于 2011-05-29T10:23:00.550 に答える
3

どのプロセスがファイルをブロックしているかを調べて調べる必要があります。このプロセスがあなたのものでない場合、問題を解決する方法はありません。もちろん、いくつかのハックを適用して手動でファイル ロックを解除することもできますが、このアプローチは予期しない結果につながる可能性が最も高いです。プロセスがあなたのものである場合は、ファイルのロックを解除するか、共有読み取りアクセスでロックしてみてください。

[編集]
ブロッカー プロセスを見つける最も簡単な方法は、Process ExplorerFind->Find Handle or DLL...を使用することです。それを起動し、ダイアログ ボックスにファイル名を入力します。検索結果で、ファイルをブロックしているプロセスを確認できます。C# でこのジョブを実行することもできます。これを確認してください: What process locks a file? . また

于 2011-05-30T14:52:48.870 に答える
-2

いいえ、できません。一部のプログラムは読み取りのためにファイルをロックしませんが、ロックした場合、他のプログラムを強制終了しないとファイルにアクセスできません。

于 2011-05-29T10:21:24.787 に答える