Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Herausfinden ob eine Datei fertig heruntergeladen ist (https://www.delphipraxis.net/20353-herausfinden-ob-eine-datei-fertig-heruntergeladen-ist.html)

Luckie 16. Apr 2004 15:26

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Solltest du UrlDownloadToFileUrlDownloadToFile nicht in einem Thread aufrufen, kehrt es erst wieder zurück, wenn es die Datei fertig runtergeladne hat.

himitsu 16. Apr 2004 15:35

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
@Lamy:
du nimmst einfach URLDownloadToFile und wärdens des Downloads wird die Prozedur, wo der Befehl drin ist angehalten, was denkst du denn, warum wird hier oftmals URLDownloadToFile in Threads auslagen? (Weil es halt das Prog anhält - du darfst den Download halt nur nicht ein einem Thread auslagern)

@Remote1:
Weil z.B. die Datei defekt sein könnte, oder man sich eine neue Version einer Datei besorgt...


[ADD]
Och menno, Luckie hat sich vorgedrängelt -.-

[ADD2]
@Lamy:
Zitat:

Und während des Downloads:
LBStatus.Caption := 'Es dauert noch einen Moment, die Datei wird heruntergeladen...'
wenn du hier im Forum etwas suchst, dann wirst du entdecken, dass man auch noch einen paar Rückruf-Prizeduren an URLDownloadToFile übergeben kann, damit kannst du dann auch anzeigen lassen, wie weit der Download schon ist.

Lamy 16. Apr 2004 15:39

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Delphi-Quellcode:
PROCEDURE TForm1.FormCreate(Sender: TObject);
VAR Datei, Ziel: PChar;
  Programmverzeichnis: STRING;
BEGIN
  Programmverzeichnis := ExtractFilePath(Application.ExeName);
  TRY
    Label2.Caption := 'Alte Programmdatei wird gelöscht';
    DeleteFile(Programmverzeichnis + '\UrFtpclient.exe');
    Label1.Caption := 'Bitte warten!';
    Datei := 'http://www.a.toolsnfun.de/urftpclient.exe';
    Ziel := PChar(Programmverzeichnis + '\urftpclient.exe');
    UrlDownloadToFile(NIL, Datei, Ziel, 0, NIL);
    IF FileExists(Programmverzeichnis + '\urftpclient.exe') THEN
      Label1.Caption := 'updatedatei heruntergeladen';
    ELSE
    BEGIN
      sleep(5000);
      Label1.Caption := 'Bitte warten Sie bis die Updatedatei heruntergeladen ist...';
    END;
    IF FileExists(Programmverzeichnis + '\urftpclient.exe') THEN
      Label1.Caption := 'updatedatei heruntergeladen';
  EXCEPT
    showmessage('Download abgebrochen');
  END;
END;
Ich weiß nicht was ein Thread ist aber der hier wartet nicht bis die Datei runtergeladen wurde...

MathiasSimmack 16. Apr 2004 15:41

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Die Code-Lib enthält doch ein Beispiel von "UrlDownloadToFile" mit Download-Fortschritt. (Link, s. Beitrag von Luckie). Daraus müsste sich doch was machen lassen. :)

Luckie 16. Apr 2004 15:42

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Ich habe ja eher die Befürchtung, dass du deine Labels gar nichts siehst, da sie in OnCreate der Form noch gar nicht angezeigr werden.

Lamy 16. Apr 2004 15:46

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Oh nein :/

Ich bin so dämlich...
Naja, der Fehler hat sich von Selbst aufgelöst, bitte fragt mich nicht worans gelegen hat.... :wall:
@ Luckie: Stimmt ^^
Aber wie kann ich in einem Label anzeigen, dass der die Datei zur Zeit runterlädt?

himitsu 16. Apr 2004 15:51

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
1. Bei mir wartet diese Prozedure

2. ist das doch nicht die, die du im Proggi hast, denn diese hat Fehler drin (nicht compilierbar)
Code:
    IF FileExists(Programmverzeichnis + '\urftpclient.exe') THEN
      Label1.Caption := 'updatedatei heruntergeladen'[color=red][b];[/b][/color]
    ELSE
3. kann es sein. das die Datei (auf'm Server) nicht existiert?

...

Das dürfte eigentlich reichen:
Delphi-Quellcode:
PROCEDURE TForm1.FormCreate(Sender: TObject);
VAR Programmverzeichnis: STRING;
BEGIN
  Programmverzeichnis := ExtractFilePath(Application.ExeName);
  TRY
    Label2.Caption := 'Alte Programmdatei wird gelöscht';
    Application.ProcessMessages;
    DeleteFile(Programmverzeichnis + '\UrFtpclient.exe');
    Label1.Caption := 'Bitte warten!';
    UrlDownloadToFile(NIL, 'http://www.a.toolsnfun.de/urftpclient.exe', PChar(Programmverzeichnis + '\urftpclient.exe'), 0, NIL);
    IF FileExists(Programmverzeichnis + '\urftpclient.exe') THEN
      Label1.Caption := 'updatedatei heruntergeladen';
  EXCEPT
    showmessage('Download abgebrochen');
  END;
END;
[ADD]
Zitat:

Aber wie kann ich in einem Label anzeigen, dass der die Datei zur Zeit runterlädt?
Es nicht im OnCreate runterladen, sonder erst später - z.B. über einen Timer.
und dann :
Delphi-Quellcode:
Application.ProcessMessages;
Wir fragen dennoch, den wir lernen auch gern und von Fehlern lernt es sich am Besten.

Luckie 16. Apr 2004 15:56

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Zitat:

Aber wie kann ich in einem Label anzeigen, dass der die Datei zur Zeit runterlädt?
UrlDownloadToFileUrlDownloadToFile <-- Bitte klicken, falls nicht schon längst geschehen.

Lamy 16. Apr 2004 15:57

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Zitat:

Zitat von himitsu
1. Bei mir wartet diese Prozedure

2. ist das doch nicht die, die du im Proggi hast, denn diese hat Fehler drin (nicht compilierbar)
Code:
    IF FileExists(Programmverzeichnis + '\urftpclient.exe') THEN
      Label1.Caption := 'updatedatei heruntergeladen'[color=red][b];[/b][/color]
    ELSE
3. kann es sein. das die Datei (auf'm Server) nicht existiert?

...

Das dürfte eigentlich reichen:
Delphi-Quellcode:
PROCEDURE TForm1.FormCreate(Sender: TObject);
VAR Programmverzeichnis: STRING;
BEGIN
  Programmverzeichnis := ExtractFilePath(Application.ExeName);
  TRY
    Label2.Caption := 'Alte Programmdatei wird gelöscht';
    Application.ProcessMessages;
    DeleteFile(Programmverzeichnis + '\UrFtpclient.exe');
    Label1.Caption := 'Bitte warten!';
    UrlDownloadToFile(NIL, 'http://www.a.toolsnfun.de/urftpclient.exe', PChar(Programmverzeichnis + '\urftpclient.exe'), 0, NIL);
    IF FileExists(Programmverzeichnis + '\urftpclient.exe') THEN
      Label1.Caption := 'updatedatei heruntergeladen';
  EXCEPT
    showmessage('Download abgebrochen');
  END;
END;
[ADD]
Zitat:

Aber wie kann ich in einem Label anzeigen, dass der die Datei zur Zeit runterlädt?
Delphi-Quellcode:
Application.ProcessMessages;
Wir fragen dennoch, den wir lernen auch gern und von Fehlern lernt es sich am Besten.

Zu 1: Jo, bei mir jetzt auch
Zu 2: Ne, hatte das nicht so in der Prozedur drin, war hier nur'n Tippfehler
Zu 3: Ja, das war mein Fehler :duck: *schäm*
Zu 4: Danke :chat:
Zu 5: ? :gruebel:

himitsu 16. Apr 2004 16:02

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Zitat:

Zitat von himitsu
[ADD]
Zitat:

Aber wie kann ich in einem Label anzeigen, dass der die Datei zur Zeit runterlädt?
Es nicht im OnCreate runterladen, sondern erst später - z.B. über einen Timer.
und dann :
Delphi-Quellcode:
Application.ProcessMessages;

war gerade beim editieren - und wenn du dann noch Luckie's Link folgst (so das er endlich in Ruhe schlafen kann), dann kannst du sogar dnoch den Downloadfortschritt anzeigen lassen.


(Also die Datei war nicht da, oder unter einem anderenn Namen?)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.
Seite 2 von 2     12   

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