Как я могу запретить URLDownloadToFile извлекать данные из кеша?
Вопрос
Я использую URLDownloadToFile для получения файла с веб-сайта.Последующие вызовы возвращают исходный файл, а не обновленную версию.Я предполагаю, что он получает кэшированную версию.
Решение
Вызовите DeleteUrlCacheEntry с тем же URL-адресом непосредственно перед вызовом URLDownloadToFile.Вам понадобится ссылка на Wininet.lib.
Другие советы
Да, по умолчанию он извлекает кэшированную версию файла.Чтобы полностью избежать файла кэша, передайте объект ibindstatuscallback в параметре LPFNCB UrldOWNLOADTOFILE ().В реализованном методе IBindStatusCallback::GetBindInfo() включите флаг BINDF_GETNEWESTVERSION и, при необходимости, также флаг BINDF_NOWRITECACHE в значение, которое вы возвращаете через параметр grfBINDF.Если вы хотите, чтобы файл кэша, если он присутствует, обновлялся, а не пропускался, вместо этого укажите флаг BINDF_RESYNCHRONIZE.
Не могли бы вы добавить безобидный параметр запроса в конец URL-адреса?
очистить кеш
// 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;