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);
现在它可以在第二台服务器(Win2003SP1)上运行,而不能在第一台服务器(Win2003SP2)上运行。
有谁知道它为什么会这样工作?