1

C# File.Copy()関数を使用して、1 TB を超える小さなファイルから大きなファイルを含むいくつかのバックアップ ファイルを、ローカル フォルダーからネットワーク共有フォルダーにコピーしています。以前はこれでうまくいきました。しかし、最近、私はさまざまな種類の例外に直面しています。この問題を解決するために資格情報が同じであっても、 NET USEコマンドを使用して共有パス接続を作成しようとしました。

File.Copy(sourceFilePath, destinationFilePath, overwrite);

私が取得している例外は次のとおりです。
-エラー:ファイルが見つかりませんでした。
-エラー:ハンドルが無効です。
-エラー:現在、ログオン要求を処理できるログオン サーバーがありません。
-エラー:指定されたネットワーク名は使用できなくなりました。

注意: これらの例外は、無効なファイル パスに対するものではありません。ファイルの一部をコピーした後に例外が発生し、同じコードが同じファイルに対して以前に機能したためです。

この種の状況を解決するアイデアを持っている人はいますか?

4

1 に答える 1

2

非常に大きなファイルをコピーする場合、Windowsには既知の問題があります。たとえば、Windowsファイルコピーのバグの再検討を参照してください。問題は、Windowsがファイルをキャッシュしたいということであるように思われ、そうすることは英雄的な努力になります。最終的にほとんどすべてのメモリがキャッシュに割り当てられ、最終的に致命的なスラッシングが発生します。これにより、他のシステム(ファイルをコピーしようとしている)で非決定論的なエラーが発生します。

これに対抗する方法は、を呼び出してバッファリングせずにファイルをコピーすることですCopyFileEx。残念ながら、.NETFrameworkから直接それを行う方法はありません。だから私はそうするいくつかのコードを書いて公開しました。より良いファイルを参照してください。コピーの置換

于 2013-01-27T13:05:52.950 に答える