Come posso impedire il recupero di URLDownloadToFile dalla cache?
Domanda
Sto utilizzando URLDownloadToFile per recuperare un file da un sito Web.Le chiamate successive restituiscono il file originale anziché una versione aggiornata.Presumo che stia recuperando una versione memorizzata nella cache.
Soluzione
Chiama DeleteUrlCacheEntry con lo stesso URL subito prima di chiamare URLDownloadToFile.Sarà necessario collegarsi a Wininet.lib
Altri suggerimenti
Sì, per impostazione predefinita sta estraendo una versione memorizzata nella cache del file.Per evitare completamente il file della cache, passa un oggetto IbindStatusUcallback nel parametro LPFNCB di UrLDOwnloadTofile ().Nel metodo IBindStatusCallback::GetBindInfo() implementato, includi il flag BINDF_GETNEWESTVERSION e, facoltativamente, anche il flag BINDF_NOWRITECACHE, nel valore restituito tramite il parametro grfBINDF.Se vuoi che il file di cache, se presente, venga aggiornato invece di skippe, specifica invece il flag BINDF_RESYNCHRONIZE.
Potresti aggiungere un parametro di query innocuo alla fine del tuo URL?
pulire la 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;