Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.199 Beiträge
 
Delphi 12 Athens
 
#6

Re: UrlDownloadtoFile aktualisiert sich nicht

  Alt 1. Dez 2005, 21:00
Diese liegt an der BrowserCache des IE's, denn UrlDownloadtoFile fragt halt einfach nur den Ie, ob es ihm die Datei geben kann und der IE schaut zuerst in der Chare nach, ob die Datei vorhanden ist ...
Und wie lange eine Datei in der BrowserCache drin bleibt, daß hängt von den Einstellungen des IEs und von der WebSeite ab, wo die Datei her ist.



Eigentlich sollte es ausreichen, wenn man vor dem Download per UrlDownloadtoFile die Datei im Browser-Chache (IE) per DeleteUrlCacheEntry löscht.

DeleteUrlCacheEntry(PAnsiChar(URL));

Allerdings scheint dieses nicht immer zu funktionieren, also hab ich zusätzlich noch die Chachedatei nach jedem Downloadversuch gelöscht ... den Dateinamen der ChacheDatei hab ich mir wärend des Downloads zurückgeben lassen.

Den kompletten Code zu posten wäre wohl zuviel des Guten, also hier nur mal die wichtigsten Teile.

Ich laß mir also beim Download den Dateinamen der ChacheDatei (in der BrowserChache des IEs) übergeben und nach dem Download wird diese ChacheDatei gelöscht, so daß beim nächsten Downloadversuch der IE/UrlDownloadtoFile auf jeden Fall diese Datei neu herunterladen muß. (falls DeleteUrlCacheEntry funktioniert, dann wird sofort die neue Datei heruntergeladen)

Delphi-Quellcode:
Type cDownloadStatusCallback = Class(TObject, IUnknown, IBindStatusCallback)
  Private
    CacheDatei: String;
    ...
    Function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULong; szStatusText: LPCWStr): HResult; StdCall;
    ...
  End;
Delphi-Quellcode:
Function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULong; szStatusText: LPCWStr): HResult; StdCall;
  Begin
    Case ulStatusCode of
      ...
      BINDSTATUS_CACHEFILENAMEAVAILABLE: CacheDatei := String(szStatusText);
    End;
    ..
  End;
Var cDownStatus: cDownloadStatusCallback;
Delphi-Quellcode:
DeleteUrlCacheEntry(PAnsiChar(URL));
cDownStatus := cDownloadStatusCallBack.Create;
Try
  ...
  cDownStatus.CacheDatei := '';
  URLDownloadToFile(nil, PChar(URL), PChar(Dateiname), 0, CDownStatus);
  If cDownStatus.CacheDatei <> 'Then DeleteUrlCacheEntry(PAnsiChar(cDownStatus.CacheDatei));
Finally
  cDownStatus.Free;
End;
DeleteUrlCacheEntry(PAnsiChar(URL));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat