![]() |
Datei mit Fortschrittsanzeige auf einen Ftp-Server hochlade
Hi,
Ich bin dabei ein Programm zu schreiben, mit dem man Dateien auf einen Ftp-Server laden kann. Nun verzweifele ich aber an der Fortschrittsanzeige... Ich weiß net wie ich das lösen kann... Code zum hochladen:
Delphi-Quellcode:
Code zum kopieren zweier Dateien mit Fortschrittsanzeige:
procedure Tbg3.upClick(Sender: TObject);
var i: Integer; begin if bg1.adresse1.Text = '' then break; idftp1.Disconnect; idftp1.Host := bg1.adresse1.Text; idftp1.Username := bg1.user1.Text; idftp1.Password := bg1.pass1.Text; try idftp1.Connect(true,10000); if idftp1.Connected then begin for i := 0 to 9 Do begin if ser_dat1[i] = '' then break; idftp1.put(ser_dat1[i],ser_dat1[i]); end; end; except raise; end; end;
Delphi-Quellcode:
Wie kann ich das jetzt kombinieren??? Oder geht das ganz anders???
procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var FromF, ToF: file of byte; Buffer: array[0..4096] of char; NumRead: integer; FileLength: longint; begin AssignFile(FromF, Source); reset(FromF); AssignFile(ToF, Destination); rewrite(ToF); FileLength := FileSize(FromF); with Progressbar1 do begin MinValue := 0; MaxValue := FileLength; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); Progress := Progress + NumRead; end; CloseFile(FromF); CloseFile(ToF); end; end; procedure TForm1.Button1Click(Sender: TObject); begin CopyFileWithProgressBar1('d:\blub.txt', 'c:\blabla.txt'); end; Schon mal Danke für die Hilfe! |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Hi,
das geht ganz anders, schau Dir mal beim den Indy Demos, die FTP-Demo an, damit sollte Dir geholfen sein. Desweiteren schau Dir mal bei der IdFtp Kompo, die Ereignisse und BeginWork und OnEndWork an, vielleicht reicht Dir das schon. |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Ok, werde ich machen...
Danke für die schnelle Antwort. |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Das funzt aber, irgendwie net, so wie ich das gemacht habe...
Delphi-Quellcode:
Wo ist da der Denk-Fehler???
procedure Tbg3.upClick(Sender: TObject);
var i: Integer; begin if bg1.adresse1.Text = '' then exit;; idftp1.Disconnect; idftp1.Host := bg1.adresse1.Text; idftp1.Username := bg1.user1.Text; idftp1.Password := bg1.pass1.Text; try idftp1.Connect(true,10000); if idftp1.Connected then begin for i := 0 to 9 Do begin if ser_dat1[i] = '' then break; idftp1.put(ser_dat1[i],ser_dat1[i]); end; end; except raise; end; end; procedure Tbg3.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin if AWorkCountMax > 0 then ProgressBar1.Max := AWorkCountMax; end; procedure Tbg3.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin ProgressBar1.Position := AWorkCount; end; procedure Tbg3.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin ProgressBar1.Position := 0; end; Schon mal Danke für die Hilfe. |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Oh... Ich habe meinen Denkfehler gefunden...
Ich habe vergessen die Proceduren OnWorkBegin, OnWork, OnWorkEnd in die Ereignisse von idftp zu schreiben... Aber noch eine andere Frage... Ich wollte zwei Statusbars verwenden, denn wenn man z.b. zwei Dateien auf einen Server lädt, dann wollte ich eine Statusbar mit dem Status der gerade hochladene Datei und eine andere mit dem Status vom hochladen auf Server. Kann man das irgendwie machen mit der Server-Statusbar? |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Klar,
bevor Du mit dem hochladen/runterladen beginnst, ermittelst Du vorher die komplette Gesamtgrösse der Dateien merkst Dir diese Größe und setzt jetzt genauso wie bei der jetzigen Statusbar den Fortschritt. |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Danke...
Das is soweit klar, aber wie setze ich dann immer die aktuelle Position der Statusbar des Servers? |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Hi,
Du nimmst zwei Variablen z.b. : iFileSizeGesamt : Cardinal; iFileProgressGesamt : Cardinal; Wie schon gesagt vor begin des Transfers ermittelst Du die Gesamtfilegröße, speicherst diese in iFileSizeGesamt und im OnWork Ereignis erhöhst Du einfach immer die iFileProgressGesamt uns setzt die Statusbar. |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
Danke...
Aber irgendwoe zeigt er die größe der Files net richtig an! So bestimme ich dir Filegröße:
Delphi-Quellcode:
Und danach setzte ich einfach eine Label Capition auf die Größe:
for i := 0 to 9 Do
begin if ser_dat1[i] = '' then break; AssignFile(F, ser_dat1[i]); reset(F); FileSizeAll := FileSizeAll + FileSize(F); CloseFile(F); files := files + 1; end;
Delphi-Quellcode:
Wo ist denn da der Fehler? oder kann man die Datei größe anders besser ermitteln?
size2.Caption := IntToStr(FileSizeAll);
Außerdem friert mein Programm immer ein, wenn es anfängt eine Datei hochzuladen? Was kann man dagegen machen? |
Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
hast du FileSizeAll irgendwo auch auf 0 gesetzt?
zum einfrieren: mach mal ein paar application.Processmessages rein! am besten in die schleife |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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