4

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

4

4 回答 4

10

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

于 2008-09-16T18:27:40.203 回答
5

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

于 2009-09-03T18:53:30.113 回答
3

您可以在 URL 的末尾添加一个无害的查询参数吗?

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

于 2008-09-16T18:35:16.783 回答
2

清理缓存

// 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;
于 2013-12-20T10:39:31.367 回答