如何防止URLDownloadToFile从缓存中检索?

时间:2008-09-16 18:26:15

标签: c++ winapi wininet

我使用URLDownloadToFile从网站检索文件。后续调用将返回原始文件而不是更新版本。我假设它正在检索缓存版本。

4 个答案:

答案 0 :(得分:8)

在调用URLDownloadToFile之前,使用相同的URL调用DeleteUrlCacheEntry。 您需要链接Wininet.lib

答案 1 :(得分:5)

是的,它默认提取文件的缓存版本。要完全避免缓存文件,请在lpfnCB中传递IBindStatusCallback对象 URLDownloadToFile()的参数。在您实现的IBindStatusCallback :: GetBindInfo()方法中,在通过grfBINDF参数返回的值中包含BINDF_GETNEWESTVERSION标志和可选的BINDF_NOWRITECACHE标志。如果您希望更新缓存文件(如果存在)而不是skippe,请改为指定BINDF_RESYNCHRONIZE标志。

答案 2 :(得分:3)

您可以在网址末尾添加无害的查询参数吗?

https://stackoverflow.com/?CacheBuster=1020am

答案 3 :(得分: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;