2017-06-19 43 views
4

我有一个脚本,可以定期从RSS源下载信息,其中一个是图像。现在,我在使用FileSystemObject和FileExists比较下载图像之前检查图像是否存在,以便我不会不断地一遍又一遍地下载相同的文件。定期地,图像会更新,但保持相同的名称,但在运行一些测试后,它看起来像FileExists只比较文件名,而不是实际的文件。由于在线文件和本地文件具有相同的名称,因此即使它们是不同的图像,它也不会下载图像。VBS FileSystem对象 - FileExists,比较不仅仅是文件名

我的问题是有另一种方式来比较文件,看看他们是不同的,尽管名称?

这是我使用的功能:

function saveImageReturnPath(oPath) 
dim oFSO 
dim oHTTP 
dim oStream 
dim fol 
dim fil 

set oFSO = createObject("Scripting.FileSystemObject") 
fil = oFSO.getBaseName(oPath) & ".jpg" 

if not oFSO.fileExists(localPath & fil) then 
    set oHTTP = createObject("MSXML2.XMLHTTP") 
    oHTTP.open "GET", oPath, false 
    oHTTP.send 
    set oStream = createObject("ADODB.Stream") 
    oStream.type = 1 
    oStream.open 
    oStream.write oHTTP.responseBody 
    oStream.saveToFile oFSO.buildPath(localPath, fil), 2 
    oStream.close 
end if 

saveImageReturnPath = localPath & fil 
end function 
+0

如果答案解决了您的问题,请将其标记为已接受的答案。如果没有答案帮助,请编辑您的问题,我们可能会帮助您。 –

+0

根据答案,它似乎是为了比较文件完全你必须下载文件不管。所以这个问题仍然存在,有没有另一个方面我可以比较,文件大小可能无需每次下载文件? – Jonny

回答

1

你可以检查文件的​​。

请参阅this question了解如何实现此目的的详细信息。

Set fso = CreateObject("Scripting.FileSystemObject") 
Dim oMD5: Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") 

Function GetMd5(filename) 
    Dim oXml, oElement 

    oMD5.ComputeHash_2(GetBinaryFile(filename)) 

    Set oXml = CreateObject("MSXML2.DOMDocument") 
    Set oElement = oXml.CreateElement("tmp") 
    oElement.DataType = "bin.hex" 
    oElement.NodeTypedValue = oMD5.Hash 
    GetMd5 = oElement.Text 
End Function 

免责声明:我没有测试此代码,它是链接的答案代码。我发布了它,以防答案被删除或链接中断。

0

要计算(更改后的)外部文件的(新)散列,您必须下载它。如果外部站点没有发布/访问时间戳或散列,则必须下载文件“以防止更新”。

+0

听起来像我不能每次都不下载图片就做一次完整的比较。你认为比较文件大小会是一个更好的选择吗?我无法想象如果图像总是相同的大小,它只是不同的内容有很大的区别......我正在阅读如何从http请求中获取信息。 – Jonny

相关问题