如果在.NET中更新,则覆盖文件

时间:2010-07-22 01:27:30

标签: c# .net copy last-modified

如果共享网络驱动器上有较新版本的文件,我的应用程序会在启动时检查。如果网络共享上的那个更新,则将其复制到本地应用程序目录并覆盖旧目录。我目前的代码是这样的:

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加载时,您似乎无法加载同一个文件两次,即使它们来自不同的位置。

2 个答案:

答案 0 :(得分:1)

docs for LastWriteTime请注意返回的值可能不准确。请注意关于Refresh方法的注释 - 虽然上面的代码几乎肯定不会要求调用它,如果您正在创建FileInfo对象并保持它们任何时间长度,这可能适用。< / p>

Windows可以自行延迟更新文件的实际上次写入时间 - 至于可能延迟多长时间,请查看处理文件信息的Windows API调用。

答案 1 :(得分:1)

根据MSDN

  

此方法可能返回不准确的内容   值,因为它使用原生   值可能不是的函数   经营不断更新   系统

如果可能,我会尝试以下其中一项:

  • 将日期嵌入文件名
  • 将文件版本或日期存储在文件中 内容。

这样您就不必担心涉及LastWriteTime属性的问题。