如果共享网络驱动器上有较新版本的文件,我的应用程序会在启动时检查。如果网络共享上的那个更新,则将其复制到本地应用程序目录并覆盖旧目录。我目前的代码是这样的:
FileInfo sourceFile = new FileInfo(source + "\\" + fileName);
if(sourceFile.Exists) {
FileInfo destFile = new FileInfo(destination + "\\" + fileName);
if (destFile.Exists && destFile.LastWriteTime >= sourceFile.LastWriteTime)
{
//Using log4net
log.Info("Current " + fileName + " is newer than the one on the server.");
return false;
}
}
检查日志时,似乎有时源文件的LastWriteTime
未被检测为更新(事件发生时)。我可能会把写时间和修改时间弄糊涂吗?有没有人知道如何实现这个目标?
编辑(以及我在下面的评论副本): 我正在复制的文件大多是我控制的DLL文件。它们是应用程序“Growl for Windows”的程序集;他们定义自定义显示。我的应用程序的目的是检查网络共享以查看是否有可用的新版本,并在需要时在本地复制。这样,我们可以帮助确保所有客户都使用最新的显示。
编辑2:
好吧,我在加载程序集时上当了,我遇到了另一个问题。当它们通过Assembly.ReflectionOnlyLoadFrom
加载时,您似乎无法加载同一个文件两次,即使它们来自不同的位置。
答案 0 :(得分:1)
docs for LastWriteTime请注意返回的值可能不准确。请注意关于Refresh
方法的注释 - 虽然上面的代码几乎肯定不会要求调用它,如果您正在创建FileInfo对象并保持它们任何时间长度,这可能适用。< / p>
Windows可以自行延迟更新文件的实际上次写入时间 - 至于可能延迟多长时间,请查看处理文件信息的Windows API调用。
答案 1 :(得分:1)
根据MSDN:
此方法可能返回不准确的内容 值,因为它使用原生 值可能不是的函数 经营不断更新 系统
如果可能,我会尝试以下其中一项:
这样您就不必担心涉及LastWriteTime
属性的问题。