如果目标不存在或源较新则进行文件复制

时间:2010-11-12 18:17:56

标签: .net file-io vbscript

如果出现以下情况,我只需要将文件从远程服务器复制到本地PC:

  1. 本地PC上没有目标文件。
  2. 服务器上的源文件比本地PC上的目标文件更新。
  3. 源文件是4 MB,因此我希望每次都避免复制。

    // File copy if target doesn't exist or source is newer:
    if (File.Exists(filenameSource))
    {
      if (File.Exists(filenameTarget))
      {
        DateTime dateSource = File.GetLastWriteTimeUtc(filenameSource);
        DateTime dateTarget = File.GetLastWriteTimeUtc(filenameTarget);
    
        if (dateTarget < dateSource)
        {
          File.Copy(filenameSource, filenameTarget, true);
        }
      }
      else
      {
        File.Copy(filenameSource, filenameTarget);
      }
    }
    

    我的问题是:

    1. 上述代码是否仍需要传输4 MB数据才能获取源的修改时间戳?

    2. 比较修改后的时间戳是否足以满足我的目的?或者我还应该比较创建的时间戳吗?

    3. (#2可能看起来像一个愚蠢的问题,但是如果我删除的新源文件的修改时间戳早于目标的修改时间戳呢?)

      加成:

      如果我在VBScript中编写上述代码怎么办?以下代码是否必须传输4 MB数据才能创建fileSource对象?

      if filesys.FileExists(strSource) then
        if filesys.FileExists(strTarget) then
          set fileSource = filesys.GetFile(strSource)
          set fileTarget = filesys.GetFile(strTarget)
          dateSource = fileSource.DateLastModified 
          dateTarget = fileTarget.DateLastModified 
          if dateTarget < dateSource then
            filesys.CopyFile strSource, strTarget, true
          end if
        else
          filesys.CopyFile strSource, strTarget, false
        end if
      end if 
      

2 个答案:

答案 0 :(得分:1)

  1. 访问大小和时间戳不需要通过网络整个文件。

  2. 我会包含创建,修改和尺寸。为了完全安全,您必须计算哈希值,但这确实需要访问4MB。只有您可以确定这是否是可接受的风险。

  3. VBScript也应该是一样的。

答案 1 :(得分:1)

如果你只是使用UNC文件共享或类似的东西,不会下载整个文件来检查日期。关于#2:最后修改的内容应该足够,因为上次修改时应该永远不会比创建的日期旧。