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.

È stato utile?

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?

https://stackoverflow.com/?CacheBuster=10:20

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top