Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi temporäre dateien-Funktion deaktivieren? (https://www.delphipraxis.net/144933-temporaere-dateien-funktion-deaktivieren.html)

cRayZo 20. Dez 2009 01:24


temporäre dateien-Funktion deaktivieren?
 
Hi, ich arbeite momentan an einem Projekt, bei dem ich Dateien von einem Server herunterlade.
Das Probem ist, dass nach kurzer Zeit das Programm nicht mehr neu herunterläd, sondern die "bereits vorhandenen" Dateien vom letzten Mal download nimmt...Die haben sich aber geändert!
Temporären Ordner löschen bringt nichts, nur neustart, und das nach jedem 2ten mal Probe fürs prog, das nervt ziemlich!
Könnt ihr mir da helfen?
lG

Meflin 20. Dez 2009 01:26

Re: temporäre dateien-Funktion deaktivieren?
 
Wie lädst du die Datei herunter? Bei URLDownloadToFile oder wie das Ding heißt wird der IE verwendet, also auch dessen Einstellungen und Cache. Steig einfach auf ne Alternative wie Synapse oder Indys um, fertig. Es sei denn dein Server cacht, aber eher unwahrscheinlich.

cRayZo 20. Dez 2009 01:39

Re: temporäre dateien-Funktion deaktivieren?
 
Hier der wichtige Auszug des Codes, ist nicht so viel zu lesen, wies aussieht;)
:coder2: ....


Delphi-Quellcode:
{function cDownloadStatusCallback._AddRef: Integer;
begin
  Result := 0;
end;

function cDownloadStatusCallback._Release: Integer;
begin
  Result := 0;
end;

function cDownloadStatusCallback.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  if(GetInterface(IID,Obj)) then
  begin
    Result := 0 
  end else
  begin
    Result := E_NOINTERFACE;
  end;
end;

function cDownloadStatusCallback.OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult;
begin
  Result := S_OK;
end;

function cDownloadStatusCallback.GetPriority(out nPriority): HResult;
begin
  Result := S_OK;
end;

function cDownloadStatusCallback.OnLowResource(reserved: DWORD): HResult;
begin
  Result := S_OK;
end;

function cDownloadStatusCallback.OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
begin
  Result := S_OK;
end;

function cDownloadStatusCallback.GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
begin
  Result := S_OK;
end;

function cDownloadStatusCallback.OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
begin
  Result := S_OK;
end;

function cDownloadStatusCallback.OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
begin
  Result := S_OK;
end; }

function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
  case ulStatusCode of
    BINDSTATUS_FINDINGRESOURCE:
    begin
      Form1.Label1.Caption := 'Bild'+ floattostr(bildvar) + ': '+'Datei wurde gefunden...';
      if (usercancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_CONNECTING:
    begin
      Form1.Label1.Caption := 'Bild'+ floattostr(bildvar) + ': '+'Es wird verbunden...';
      if (usercancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_BEGINDOWNLOADDATA:
    begin
      Form1.Gauge1.Progress := 0;
      Form1.Label1.Caption := 'Bild'+ floattostr(bildvar) + ': '+'Der Download wurde gestartet...';
      if (UserCancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_DOWNLOADINGDATA:
    begin
      Form1.Gauge1.Progress := MulDiv(ulProgress,100,ulProgressMax);
      Form1.Label1.Caption := 'Bild'+ floattostr(bildvar) + ': '+'Datei wird heruntergeladen...';
      if (UserCancel) then
      begin
        Result := E_ABORT; exit;
      end;
    end;
    BINDSTATUS_ENDDOWNLOADDATA:
    begin
      Form1.Label1.Caption := 'Bild'+ floattostr(bildvar) + ': '+'Download wurd beendet...';
      Bildvar:=Bildvar+1;
    end;
   
  end;
  Application.ProcessMessages;

  Result := S_OK;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  cDownStatus : cDownloadStatusCallback;
  v1, v2     :string;
  faktorx,faktory:real; zoom:string;
  link:string;
i,x,y:integer;
begin

//.....unrelevantes Zeug hier^^.......


////1
   v1:='http://********.com/Content/*****/'+*****+'/'+x1+'/'+y1+'/'+'?path='+link;
   v2:='C:\'+Zahl+'.1.jpg';
  cDownStatus := cDownloadStatusCallBack.Create;
  try
   URLDownloadToFIle(nil,PChar(v1),
     PChar(v2),0,CDownStatus);
  finally
    cDownStatus.Free;
  end;
////2 .....
////3 ..... usw

ringli 20. Dez 2009 08:05

Re: temporäre dateien-Funktion deaktivieren?
 
Du solltest DeleteURLCacheEntry verwenden bevor du einen neuen Download mit URLDownloadToFile machst. Sonst wird die Datei aus dem Cache (temporäre Internetdateien) geladen.

cRayZo 20. Dez 2009 11:11

Re: temporäre dateien-Funktion deaktivieren?
 
Zitat:

Zitat von ringli
Du solltest DeleteURLCacheEntry verwenden bevor du einen neuen Download mit URLDownloadToFile machst. Sonst wird die Datei aus dem Cache (temporäre Internetdateien) geladen.

Welches Uses hat DeleteURLCacheEntry?

Meflin 20. Dez 2009 11:13

Re: temporäre dateien-Funktion deaktivieren?
 
WinInet

cRayZo 20. Dez 2009 12:45

Re: temporäre dateien-Funktion deaktivieren?
 
funktioniert irgendwie nicht, bzw nicht immer.
scheint jetzt Zufall zu sein, wann er es neu downloadet oder nicht
was muss ich denn für
Delphi-Quellcode:
IpszUrlName:PChar
einsetzen? Momentan hab ich die Serverhauptseite eingestellt(also die ohne slashs

ringli 20. Dez 2009 13:11

Re: temporäre dateien-Funktion deaktivieren?
 
Hier mal ein Ausschnitt aus einer Unit wie ich es gelöst habe:
Delphi-Quellcode:
// Zuerst die Datei aus dem Cache löschen falls diese dort vorhanden ist
  DeleteURLCacheEntry(PChar(URLtoCheck));
  // Jetzt die Datei neu aus dem Internet laden
  if URLDownloadToFile(nil,PChar(URLtoCheck),PChar(LocalFileName),0,nil) = S_OK then
    begin
      // Datei gleich wieder aus dem Cache löschen
      DeleteURLCacheEntry(PChar(URLtoCheck));
Bei URLtoCheck wird die entsprechende Adresse der herunterzuladenden Datei angegeben. Also z.B.: http://www.homepage.de/ordner/test.cfg

cRayZo 21. Dez 2009 15:01

Re: temporäre dateien-Funktion deaktivieren?
 
es klappt immer noch nicht!..
ich bezweifele aber auch irgendwie dass das im cache ist. Ich hab sogar über meinen browser nochmal manuell den kompletten cache gelöscht und er hat trotzdem sofort alles geladen!
Woran könnte das denn noch liegen?

himitsu 21. Dez 2009 15:33

Re: temporäre dateien-Funktion deaktivieren?
 
Zitat:

Zitat von cRayZo
ich bezweifele aber auch irgendwie dass das im cache ist.
... und er hat trotzdem sofort alles geladen!

Wenn es sofort da ist, dann liegt es irgendwo in einer Cache vor.
Beidem Tempo (so wie beschrieben) muß diese Cache auf deinem PC liegen und dort ist die einzige mögliche Cache die des Browsers.

Zitat:

Zitat von cRayZo
Ich hab sogar über meinen browser nochmal manuell den kompletten cache gelöscht

Von welchem Browser?
(diese Funktionen laufen über den Internet Explorer)

andere Möglichkeit: du nimmst die Indys und versuchst es damit.

cRayZo 21. Dez 2009 15:39

Re: temporäre dateien-Funktion deaktivieren?
 
Zitat:

Zitat von himitsu
andere Möglichkeit: du nimmst die Indys und versuchst es damit.

Das sagt mir nichts, was ist das?

Zitat:

Zitat von himitsu
Zitat:

Zitat von cRayZo
Ich hab sogar über meinen browser nochmal manuell den kompletten cache gelöscht

Von welchem Browser?
(diese Funktionen laufen über den Internet Explorer)

über opera, ich versuchs gleich mal mit dem inet explorer(PS: wie geht das da?)

wie kann ich mit delphi denn die komplette cache löschen? sonst mach ichs halt radikal...

Was mir grade auffällt...
Ich downloade so ja hauptsächlich bilder..
Wenn ich ein Bild geladen habhe und dann ein anderes lade, kommt trotzdem das erste im Bilderfeld im Prog...Aber auch nicht immer.Wie kann das sein!? Wenn ich 5 Minuten warte geht es wieder...

ringli 21. Dez 2009 19:54

Re: temporäre dateien-Funktion deaktivieren?
 
Erstelle doch mal ein kleines Testprojekt bei dem das Problem auftritt und stelle es hier rein. Vielleicht lässt sich der Fehler so leichter finden.

thkerkmann 21. Dez 2009 20:37

Re: temporäre dateien-Funktion deaktivieren?
 
Hi,

häng mal an die URL einfach einen Timestamp dran

Delphi-Quellcode:
  newURL := URL + '?' + FormatDateTime('yyyymmddhhnnsszzz');
Damit kannst du den Cache überlisten.

Gruss

cRayZo 22. Dez 2009 09:49

Re: temporäre dateien-Funktion deaktivieren?
 
Zitat:

Zitat von thkerkmann
Hi,

häng mal an die URL einfach einen Timestamp dran

Delphi-Quellcode:
  newURL := URL + '?' + FormatDateTime('yyyymmddhhnnsszzz');
Damit kannst du den Cache überlisten.

Gruss

Delphi verlangt zwei Parameter, ich hab glaub ich flasch kombiniert?:
Delphi-Quellcode:
FormatDateTime('yyyymmddhhnnsszzz',20001204114444444)
ich hab noch nie mit sowas gearbeitet...aber die Idee ist gut :D kannst du mir noch einen Tipp geben?



@ ringli: ich hab hier bereits alles so klein und simpel wie möglich gepostet. Oder willst du ne komplette Datei?

ringli 22. Dez 2009 17:52

Re: temporäre dateien-Funktion deaktivieren?
 
Ja, ich meinte ein komplettes Projekt um zu sehen ob sich vielleicht im Rest des Codes ein Käferchen befindet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz