2017-06-19 6 views
4

RSSフィードから情報を定期的にダウンロードするスクリプトがあります。その1つはイメージです。今、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

関連する問題