2016-08-16 4 views
1

Windows Server 2008 R2 Standard EditionでWindowsサービスを実行しています。これはバイナリファイルを処理し、処理されたファイルを同じボリューム上の別のフォルダに移動する.NET 4.0アプリケーションです。ファイルシステムはNTFSです。問題は、次のコードである:D:\src_dir\fileX.binD:\dst_dir\fileX.binFile.Move()操作でエラーなしで元のフォルダからファイルを削除できない

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

パスsrcFileNamedstFileNameは次の形式を持っています。 logはlog4netロガーオブジェクトです。ファイルは、処理のために、File.ReadAllBytes(srcFileName)で読み取られます。

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

この問題の原因は何ですか動作、特に移動が失敗した場合の例外の存在がありません。移動操作が正常に完了したことを確認する方法はありますか?

+0

常に同じフォルダと同じユーザーですか、特定のユーザーまたはフォルダにのみ問題がありますか? – Jonny

+0

@ジョニーこれは常に同じユーザーと同じ2つのフォルダです。サービスはローカルシステムアカウントで実行されています。 – elojd

答えて

0

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

ファイルを移動するには2つの方法があります。実際にディレクトリ情報を移動し、可能であればそれを移動先に身体的にコピーしてから、ターゲットを削除します。あなたが記述した例では、オプション(2)が使用され、何らかの理由で削除試行が失敗しました。ファイルが別のプロセスやアプリケーションによってI/Oのためにオープンされている可能性があります(UNIXでは問題ありません.I-nodeがアクティブな間にディレクトリエントリを削除しても問題ありません。有効なファイル記述子を取得した)。

+0

'File.Move()'が正しく理解されていれば、同じボリューム内で使用するとコピー+削除を実行すべきではありません。操作を正常に完了できなかった場合、例外がスローされることが予想されます。 – elojd

関連する問題