1

我的应用程序会在启动时检查共享网络驱动器上是否有更新版本的文件。如果网络共享上的一个较新,它会将其复制到本地应用程序目录并覆盖旧的。我当前执行此操作的代码如下所示:

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.

4

2 回答 2

1

LastWriteTime的文档确实注意到返回的值可能不准确。还要注意有关该Refresh方法的注释 - 虽然上面的代码几乎肯定不需要调用它,但如果您正在创建 FileInfo 对象并持有它们任何时间长度,这可能是适用的。

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

于 2010-07-22T01:38:07.447 回答
1

根据MSDN

此方法可能返回不准确的值,因为它使用的本机函数的值可能不会被操作系统持续更新。

如果可能的话,我会尝试以下方法之一:

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

这样您就不必担心涉及LastWriteTime财产的问题。

于 2010-07-22T01:40:12.950 回答