我有一个在 Windows Server 2008 R2 标准版上运行的 Windows 服务。这是一个 .NET 4.0 应用程序,它处理二进制文件并将处理后的文件移动到同一卷上的不同文件夹中。文件系统为 NTFS。问题在于以下代码:
try
{
if (File.Exists(srcFileName))
{
File.Move(srcFileName, dstFileName);
}
}
catch (Exception ex)
{
log.Error("Failed to move file.", ex);
}
路径srcFileName
和dstFileName
具有以下形式:D:\src_dir\fileX.bin
和D:\dst_dir\fileX.bin
。是log
log4net 记录器对象。读取文件以进行处理File.ReadAllBytes(srcFileName)
。
问题是,虽然代码大部分时间都按预期工作,但偶尔会复制一些文件而不是移动到目标文件夹,并且日志中没有记录错误。查看日志,似乎一切正常,但有些文件同时出现在源文件夹和目标文件夹中。该问题似乎与服务器负载有关,因为它似乎发生在 RAM 使用量超过 30 GB(从可用的 32 GB)并且平均磁盘队列超过 2 时。
我会很感激可能导致这种行为的任何想法,尤其是在移动失败时没有异常。有没有办法确保移动操作成功完成?