Как я могу запретить URLDownloadToFile извлекать данные из кеша?

StackOverflow https://stackoverflow.com/questions/75432

  •  09-06-2019
  •  | 
  •  

Вопрос

Я использую URLDownloadToFile для получения файла с веб-сайта.Последующие вызовы возвращают исходный файл, а не обновленную версию.Я предполагаю, что он получает кэшированную версию.

Это было полезно?

Решение

Вызовите DeleteUrlCacheEntry с тем же URL-адресом непосредственно перед вызовом URLDownloadToFile.Вам понадобится ссылка на Wininet.lib.

Другие советы

Да, по умолчанию он извлекает кэшированную версию файла.Чтобы полностью избежать файла кэша, передайте объект ibindstatuscallback в параметре LPFNCB UrldOWNLOADTOFILE ().В реализованном методе IBindStatusCallback::GetBindInfo() включите флаг BINDF_GETNEWESTVERSION и, при необходимости, также флаг BINDF_NOWRITECACHE в значение, которое вы возвращаете через параметр grfBINDF.Если вы хотите, чтобы файл кэша, если он присутствует, обновлялся, а не пропускался, вместо этого укажите флаг BINDF_RESYNCHRONIZE.

Не могли бы вы добавить безобидный параметр запроса в конец URL-адреса?

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

очистить кеш

// 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top