2008-09-16 74 views

答えて

8

URLDownloadToFileを呼び出す直前に同じURLでDeleteUrlCacheEntryを呼び出します。 Wininet.libにリンクする必要があります

4

はい、それはデフォルトでは、ファイルのキャッシュされたバージョンを引っ張っています。キャッシュファイルを完全に回避するには、URLDownloadToFile()のlpfnCB パラメータにIBindStatusCallbackオブジェクトを渡します。実装されているIBindStatusCallback :: GetBindInfo()メソッドでは、grfBINDFパラメータを使用して返された値にBINDF_GETNEWESTVERSIONフラグとオプションでBINDF_NOWRITECACHEフラグを含めます。スキップの代わりにキャッシュファイル(存在する場合)を更新したい場合は、代わりにBINDF_RESYNCHRONIZEフラグを指定してください。

+0

あなたは一例を示してもらえますか?私はこのような値でポインタとor'dをチェックし、それでもキャッシュされた値を使用しました:* grfBINDF | = BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE; – jla

+0

私は提供する例はありません。私が言ったことは、MSDNの文書化された動作です。 '= 'を' = 'に置き換えてみてください。例:' * grfBINDF = BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE; '既存のビットを保持しているので、変数が呼び出し側のエンドで初期化されていなければ、結果は' BINDF_OFFLINEOPERATION'や 'BINDF_GETFROMCACHE_IF_NET_FAIL'のような無作為なビットで終わる可能性があります。ビットを割り当てる前に出力フラグを常に0にしてください。 –

1

クリーンキャッシュ

// Limpa cache do Internet Explorer 
procedure DeletaIECache; 
var 
    lpEntryInfo: PInternetCacheEntryInfo; 
    hCacheDir: LongWord; 
    dwEntrySize: LongWord; 
begin 
    dwEntrySize := 0; 
    FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize) ; 
    GetMem(lpEntryInfo, dwEntrySize) ; 
    if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; 
    hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize) ; 
    if hCacheDir <> 0 then 
    begin 
     repeat 
     DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName) ; 
     FreeMem(lpEntryInfo, dwEntrySize) ; 
     dwEntrySize := 0; 
     FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize) ; 
     GetMem(lpEntryInfo, dwEntrySize) ; 
     if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; 
     until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize) ; 
    end; 
    FreeMem(lpEntryInfo, dwEntrySize) ; 
    FindCloseUrlCache(hCacheDir) ; 
end; 
関連する問題