Delphi-PRAXiS

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)

Lamy 16. Apr 2004 12:56


Herausfinden ob eine Datei fertig heruntergeladen ist
 
Hi!

Gibt es eine Möglichkeit einem Programm zu sagen dass eine Datei heruntergeladen wurde und es nun drauf zugreifen kann?

Danke schonmal,Lamy

S - tefano 16. Apr 2004 13:07

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Hi,

meinst du einem Programm oder deinem Programm?
Wenn du meinst das du in deinem Programm per Quellcode prüfen willst ob eine Datei die du geladen hast fertig ist und du jetzt mit ihr arbeiten kannst, ist das recht einfach.

Du findest die größe der Datei im Internet heraus, und vergleichst sie mit der Größe der Datei auf deinem Rechner.
Such hier in der DP mal nach FileSize oder GetFileSize, sind eine schöne Dinger dabei.
Naja und für das im Internet müsste man wissen was für Klassen oder Kompos du dafür benutzt. In den entsprechenden Dokus könnte man sowas mal nachlesen.

Bis dann,

S - tefano

Lamy 16. Apr 2004 13:09

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Hm, falsch ausgedrückt - mein Programm lädt eine Updatedatei runter die etwas größer ist.
Das Programm soll so lange warten bis die Datei fertig heruntergeladen ist und diese dann öffen.

himitsu 16. Apr 2004 13:33

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Wie lädt denn dein Programm die Datei runter?

Einige der Methoden halten das Programm ja eh an, bis die Datei da ist, oder ein Fehler auftritt.

S - tefano 16. Apr 2004 14:14

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Ansonsten wenn du bspw. die Indys benutzt, bekommst du ja bei solchen Sachen Events ausgelöst. Zum Beispiel immer wenn eine bestimmte Blockgröße fertig übertragen wurde, oder (jedenfalls bei idFTP) auch wenn die Datei fertig ist (OnAfterGet).

Bis dann,

S - tefano

Remote1 16. Apr 2004 14:33

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
kommt drauf an wie du runterlädst

machst du das mit
Delphi-Quellcode:
UrlDownloadToFile(nil, PChar(quelle), PChar(zeil), 0, nil)
dann gibt die fkt auch zurück ob der download erfolgreich war,und du kannst die datei dann auch öffnen

du könntest natürlich auch immer überprüfen, ob die datei überhaut schon vorhanden ist, denn ich glaube die wird erst in ein anderes verzeichnis geladen und dann erst zum zeilverzeichnis kopiert (zumindest bei meinem ie)
tja, und wenn die da ist, dann machst du halt was du machen willst

himitsu 16. Apr 2004 14:43

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Bei mir versucht UrlDownloadToFile die Datei zu überschreiben, wenn schon eine da ist.

Remote1 16. Apr 2004 14:53

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
ja dann must du halt abfragen ob die schon da ist und wenn ja irgens eine zahl oder so noch mit anfügen
Delphi-Quellcode:
if fileexists('..')
  then dateiname:=alterdateiname+'keineahnung'
  else halt normal;

Remote1 16. Apr 2004 14:54

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
aber wozu eine datei runterladen die du schon hast???

Lamy 16. Apr 2004 15:25

Re: Herausfinden ob eine Datei fertig heruntergeladen ist
 
Zitat:

Zitat von Remote1
kommt drauf an wie du runterlädst

machst du das mit
Delphi-Quellcode:
UrlDownloadToFile(nil, PChar(quelle), PChar(zeil), 0, nil)
dann gibt die fkt auch zurück ob der download erfolgreich war,und du kannst die datei dann auch öffnen

du könntest natürlich auch immer überprüfen, ob die datei überhaut schon vorhanden ist, denn ich glaube die wird erst in ein anderes verzeichnis geladen und dann erst zum zeilverzeichnis kopiert (zumindest bei meinem ie)
tja, und wenn die da ist, dann machst du halt was du machen willst

Genau so will ichs machen... , die Datei wird zuerst gelöscht und dann eine neue mit dem selben Dateinamen heruntergeladen.
Aber wie wird denn zurückgegen dass die fertig runtergeladen ist?

Ich will das dann so einbinden:

Delphi-Quellcode:
 IF Datei runtergeladen THEN
BEGIN
Datei öffnen
Programm schließen
END
Und während des Downloads:
LBStatus.Caption := 'Es dauert noch einen Moment, die Datei wird heruntergeladen...'

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 10:50 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