別のサーバーで奇妙な問題に直面しIOException
ています。これが私の話です:
ファイルの変更についてフォルダーを監視するWinサーバー(C#)があります。また、FTPサーバー(WinSSHD)は同じフォルダーを指します。誰かがファイルをアップロードすると、WinServiceは書き込みが完了したかどうかをチェックします。ファイルがアップロードされた場合、WinServiceはFile.Moveメソッドを介してファイルの名前を変更します。
書き込み完了チェックはFile.Openメソッドで行われます。このような:
public static bool IsWriteComplete(string filePath)
{
bool isWriteComplete;
FileStream stream = null;
try
{
stream = File.Open(filePath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite|FileShare.Delete);
isWriteComplete = true;
}
catch (IOException)
{
isWriteComplete = false;
}
catch (Exception ex)
{
isWriteComplete = false;
}
finally
{
if (stream != null) { stream.Close(); }
}
return isWriteComplete;
}
何らかの理由で、あるサーバーでは完全に機能し(Win2003SP2)、別のサーバーではまったく機能しません(Win2003SP1)。IsWriteComplete
メソッドはTrueを示し、WinServerはファイルを移動しようとし、後で終了しIOException
ます。そのような問題に関する参考文献は見つかりませんでした。
問題を修正するために、に置き換えましFile.Open
たFile.Move
。前:
stream = File.Open(filePath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite|FileShare.Delete);
後:
File.Move(filePath, filePath);
そして今では、2番目のサーバー(Win2003SP1)で動作し、最初のサーバー(Win2003SP2)では動作しません。
なぜそれがそのように機能するのか誰かが知っていますか?