Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei mit Fortschrittsanzeige auf einen Ftp-Server hochlade (https://www.delphipraxis.net/26810-datei-mit-fortschrittsanzeige-auf-einen-ftp-server-hochlade.html)

Dark-L0rd 29. Jul 2004 17:42


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:
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;
Code zum kopieren zweier Dateien mit Fortschrittsanzeige:
Delphi-Quellcode:
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;
Wie kann ich das jetzt kombinieren??? Oder geht das ganz anders???
Schon mal Danke für die Hilfe!

DataCool 29. Jul 2004 18:07

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.

Dark-L0rd 29. Jul 2004 18:56

Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
 
Ok, werde ich machen...
Danke für die schnelle Antwort.

Dark-L0rd 30. Jul 2004 08:20

Re: Datei mit Fortschrittsanzeige auf einen Ftp-Server hoch
 
Das funzt aber, irgendwie net, so wie ich das gemacht habe...


Delphi-Quellcode:
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;
Wo ist da der Denk-Fehler???
Schon mal Danke für die Hilfe.

Dark-L0rd 30. Jul 2004 08:51

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?

DataCool 30. Jul 2004 10:22

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.

Dark-L0rd 30. Jul 2004 12:01

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?

DataCool 30. Jul 2004 21:24

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.

Dark-L0rd 31. Jul 2004 08:22

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:
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;
Und danach setzte ich einfach eine Label Capition auf die Größe:

Delphi-Quellcode:
size2.Caption := IntToStr(FileSizeAll);
Wo ist denn da der Fehler? oder kann man die Datei größe anders besser ermitteln?

Außerdem friert mein Programm immer ein, wenn es anfängt eine Datei hochzuladen? Was kann man dagegen machen?

iaby 31. Jul 2004 16:48

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 06:39 Uhr.
Seite 1 von 2  1 2      

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