1

Windows Server 2008 R2 Standard Edition で Windows サービスを実行しています。これは、バイナリ ファイルを処理し、処理されたファイルを同じボリューム上の別のフォルダーに移動する .NET 4.0 アプリケーションです。ファイルシステムはNTFSです。問題は次のコードにあります。

try
{
    if (File.Exists(srcFileName))
    {
        File.Move(srcFileName, dstFileName);
    }
}
catch (Exception ex)
{
    log.Error("Failed to move file.", ex);
}

パスsrcFileNamedstFileNameの形式はD:\src_dir\fileX.bin、 とD:\dst_dir\fileX.binです。これlogは log4net ロガー オブジェクトです。で処理するためにファイルが読み取られますFile.ReadAllBytes(srcFileName)

問題は、ほとんどの場合、コードは期待どおりに機能しますが、一部のファイルが宛先フォルダーに移動されずにコピーされ、ログにエラーが記録されないことがあります。ログを見ると、すべて正常に動作しているように見えますが、一部のファイルがソース フォルダーと宛先フォルダーの両方に表示されます。RAM の使用量が (利用可能な 32 GB から) 30 GB を超え、平均ディスク キューが 2 を超えた場合に発生するように見えるため、この問題はサーバーの負荷に関連しているようです。

この動作の原因、特に移動が失敗したときの例外がないことを考えていただければ幸いです。移動操作が正常に完了したことを確認する方法はありますか?

4

1 に答える 1

0

オフハンドでは、削除操作が失敗しているようです。

ファイルを「移動」するには 2 つの方法があります。実際にディレクトリ情報を移動する方法と、それが可能でない場合は、移動先に本体をコピーしてから移動先を削除する方法です。あなたが説明した例では、オプション (2) が使用され、何らかの理由で削除の試みが失敗しました。ファイルが別のプロセスまたはアプリケーションによって I/O 用に開かれている可能性があります (UNIX では問題ありません。現在のリーダー/ライターは、一度ディレクトリ エントリを削除すると必要ないため、i ノードがアクティブな間はディレクトリ エントリを削除してもかまいません)。有効なファイル記述子を取得します)。

于 2016-08-16T15:15:58.480 に答える