2017-06-19 66 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

相關問題