Comment puis-je empêcher URLDownloadToFile de récupérer du cache?
Question
J'utilise URLDownloadToFile pour récupérer un fichier sur un site Web. Les appels suivants renvoient le fichier d'origine plutôt qu'une version mise à jour. Je suppose qu'il est en train de récupérer une version en cache.
La solution
Appelez DeleteUrlCacheEntry avec la même URL juste avant d'appeler URLDownloadToFile. Vous devrez créer un lien contre Wininet.lib
Autres conseils
Oui, il extrait une version mise en cache du fichier par défaut. Pour éviter complètement le fichier de cache, transmettez un objet IBindStatusCallback à la commande lpfnCB. paramètre de URLDownloadToFile (). Dans votre méthode IBindStatusCallback :: GetBindInfo () implémentée, incluez l'indicateur BINDF_GETNEWESTVERSION et éventuellement l'indicateur BINDF_NOWRITECACHE dans la valeur que vous renvoyez via le paramètre grfBINDF. Si vous souhaitez que le fichier cache, s'il est présent, soit mis à jour au lieu d'être skippe, spécifiez l'indicateur BINDF_RESYNCHRONIZE.
Pourriez-vous ajouter un paramètre de requête inoffensif à la fin de votre URL?
Nettoyer le cache
// 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;