如果出现以下情况,我只需要将文件从远程服务器复制到本地PC:
源文件是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);
}
}
我的问题是:
上述代码是否仍需要传输4 MB数据才能获取源的修改时间戳?
比较修改后的时间戳是否足以满足我的目的?或者我还应该比较创建的时间戳吗?
(#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
答案 0 :(得分:1)
访问大小和时间戳不需要通过网络整个文件。
我会包含创建,修改和尺寸。为了完全安全,您必须计算哈希值,但这确实需要访问4MB。只有您可以确定这是否是可接受的风险。
VBScript也应该是一样的。
答案 1 :(得分:1)
如果你只是使用UNC文件共享或类似的东西,不会下载整个文件来检查日期。关于#2:最后修改的内容应该足够,因为上次修改时应该永远不会比创建的日期旧。