AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdFTP + progressbar wie ?!
Thema durchsuchen
Ansicht
Themen-Optionen

IdFTP + progressbar wie ?!

Ein Thema von ghost007 · begonnen am 8. Feb 2006 · letzter Beitrag vom 6. Nov 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#11

Re: IdFTP + progressbar wie ?!

  Alt 9. Feb 2006, 22:54
aha, da stellen sich mir nur 2 fragen.
1.Wie komm ich an das directory listing?
2.Wie bekomme ich die größe daraus?

Christian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: IdFTP + progressbar wie ?!

  Alt 9. Feb 2006, 23:55
Schon mal die Demos zu den Indy Komponenten angeguckt? Da sollte ein kompletter FTP Client dabei sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#13

Re: IdFTP + progressbar wie ?!

  Alt 10. Feb 2006, 00:29
Ja, hab ich , aber da kommt dann ein fehler das eine unit, die unter uses eingetragen ist, mit einer anderen version kompiliert wurde....
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: IdFTP + progressbar wie ?!

  Alt 10. Feb 2006, 00:32
Ja und? Du sollst dir ja nur die entsprechenden Stellen im Sourcecode angucken. Kompilieren können musst du doch gar nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: IdFTP + progressbar wie ?!

  Alt 10. Feb 2006, 07:52
Guten Morgen.

Bei einer vorkonfigurierten FTP Client-Komponente (host, username, password) hilft manchmal auch schon das hier weiter:

Delphi-Quellcode:
function FTPSize(ftp: TIdFTP; const fn: TFileName): Int64;
begin
  ftp.Connect(true, -1);
  try
    try
      Result := ftp.Size(fn);
    except
      Result := 0;
    end;
  finally
    ftp.Disconnect;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von TheProfi
TheProfi

Registriert seit: 30. Mai 2005
Ort: Emden
42 Beiträge
 
Delphi 10.3 Rio
 
#16

Re: IdFTP + progressbar wie ?!

  Alt 4. Mai 2010, 14:51
Hi,

ich habs so gelöst und es geht. Dieser Programmcode stammt von meinem Programmupdater (D2010, akt. Indy 10.5.7).
Mit dieser Function lade ich alle Dateien runter die in einem bestimmten Verzeichnis liegen.

Version : ist halt ein Verzeichnis auf dem FTPServer
Pfad : ist halt ein weiteres Verzeichnis auf dem FTPServer
LStatus1 : gibt die als Text "Download Datei x von y"
LStatus2 : gibt die aktuelle Datei mit Dateigöße zurück
PB : 0 bis Anzahl Dateien im Verzeichnis
PB2 : aktueller Downloadverlauf der jeweiligen Datei

Delphi-Quellcode:
Function DownloadFiles(Version,pfad : String; var ftp : TIdFTP; var LStatus1,LStatus2 : TADVSmoothLabel; var pb,pb2 : TADVProgressBar) : boolean;
var zielverzeichnis : string;
    dateiliste : TStringlist;
    i : Integer;
begin
  pb.position := 0;
  pb2.Position := 0;
  pb2.Visible := true;
  LStatus2.Visible := true;
  if FTP.Connected then
    ftp.Disconnect
  else begin
    FTP.Username := 'dein Accountname';
    FTP.Password := 'dein Passwort';
    FTP.Host := 'URL';

    FTP.TransferType := ftBinary; //ftASCII;
    FTP.Connect;
    FTP.ChangeDir('updates');
    FTP.ChangeDir(version);
    FTP.ChangeDir(pfad);

    zielverzeichnis := (extractfiledir(paramstr(0))+pfadinstall+'\'+version+'\'+pfad);
    if not DirectoryExists(zielverzeichnis) then ForceDirectories(zielverzeichnis);
    dateiliste := Tstringlist.Create;
    FTP.List(dateiliste,'*.*',False);
    pb.Max := dateiliste.Count;
    dateiliste.SaveToFile(zielverzeichnis+'\'+version+'.txt');
    //Dateiliste herunterladen
    for i := 0 to dateiliste.Count - 1 do begin
      StatusSchreiben(dateiliste[i],4,f_status.M_Status); //ist eine Procedure die eine Infozeile in ein Memo schreibt
      LStatus1.Caption.Text := 'Download Datei '+inttostr(i+1)+' von '+inttostr(dateiliste.Count);
      LStatus2.Caption.Text := 'Aktueller Download: '+ dateiliste[i] +'('+inttostr(FTP.Size(dateiliste[i]))+' Bytes)';
      PB2.Max := FTP.Size(dateiliste[i]);
      FTP.Get(dateiliste[i],zielverzeichnis+'\'+dateiliste[i],True); //Dateiholen und überschreiben
      pb.Position := i+1;
      pb.Refresh;
    end;
    dateiliste.Free;
    FTP.Disconnect;
  end;
  pb2.Visible := false;
  LStatus2.Visible := false;
  DownloadFiles := true;
end;

procedure TFMain.FTPWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  pb_3.Position := AWorkcount;
  pb_3.Refresh;
end;

procedure TF_INUpdate.FTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  pb_3.Position := 0;
  pb_3.Refresh;
end;

procedure TMain.bt_startenClick(Sender: TObject);
var DBVersionGefunden : boolean;
    zielverzeichnis : string;
begin
  if DownloadFiles('3730','db',ftp,L_Status_2,L_Status_3,pb_2,pb_3) then begin
      //...
    end;
  end;
end;
Man kanns noch optimieren. Wer Ideen hat immer gerne.
Georg Reimann
------------------------------------------------------
Sicher ist nur eines, dass nichts sicher ist...
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#17

AW: IdFTP + progressbar wie ?!

  Alt 6. Nov 2013, 14:43
Hallo,

der Beitrag ist zwar schon etwas älter, aber ich hätte hierzu mal noch eine Frage...

Der Source funktioniert bei mir nur wie folgt:

Delphi-Quellcode:
//******************************************************************************
// FTP Download with Progressbar *
//******************************************************************************

procedure TForm1.Button20Click(Sender: TObject);

begin

  //Get File Size
  Try
    FTP.Host := 'Server';
    FTP.Username := 'User';
    FTP.Password := 'Password';
    FTP.Connect;
    FTP.ChangeDir('/Folder1/Folder2/');
    giFileSize := FTP.Size('setup.exe');
    FTP.Disconnect;
  Except
    FTP.Free;
    Exit;
  End;

  //Download File
  Try
    FTPDownload.Host := 'Server';
    FTPDownload.Username := 'User';
    FTPDownload.Password := 'Password';
    FTPDownload.Connect;
    FTPDownload.ChangeDir('/Folder1/Folder2/');
    FTPDownload.Get('setup.exe', 'C:\Temp\setup.exe', True);
    FTPDownload.Disconnect;
  Except
    FTPDownload.Free;
    Exit;
  End;

end;

procedure TForm1.FTPDownloadWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
  with FTPProgress do
  begin
    Max := giFileSize;
    Position := 0;
    Visible := true;
  end;
end;

procedure TForm1.FTPDownloadWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
  with FTPProgress do
    Position := Integer(AWorkCount);
end;

procedure TForm1.FTPDownloadWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  with FTPProgress do
    Visible := false;
end;
Wie man sieht verwende ich im Moment zwei FTP Komponenten.
Dies liegt daran da ich die File Größe erst ermittle und dann über die zweite den Download Starte.
Ich habe erst versucht beides über eine FTP Komponente zu machen, aber da hat er mir dann beim File Size ermitteln die OnWork / OnBeforeWork Aktionen ausgeführt.

Meine Frage daher, kann man es steuern wann er die OnWork / OnBeforeWork Ereignisse aufruft oder nicht?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

AW: IdFTP + progressbar wie ?!

  Alt 6. Nov 2013, 15:15
Du könntest natürlich die Events beim GetSize abhängen (z.B. FTP.DownloadWorkBegin:=nil; ) und beim get wieder anhängen (z.B. FTP.DownloadWorkBegin:=FTPDownloadWorkBegin; )
oder über eine Variable die ausgabe steuern (beim GetSize einen Boolean auf True setzen und in den Events if x then Exit; ).

AWorkCountMax hat dir nicht gefallen?
Delphi-Quellcode:
//******************************************************************************
// FTP Download with Progressbar *
//******************************************************************************

procedure TForm1.Button20Click(Sender: TObject);
begin
  Try
    FTPDownload.Host := 'Server';
    FTPDownload.Username := 'User';
    FTPDownload.Password := 'Password';
    FTPDownload.Connect;
    FTPDownload.ChangeDir('/Folder1/Folder2/');
    FTPDownload.Get('setup.exe', 'C:\Temp\setup.exe', True);
    FTPDownload.Disconnect;
  Except
    FTPDownload.Free; // wieso Free? (sei froh, daß dir TComponent die Form-Variable FTPDownload "zufällig" auf nil setzt, wenn sie published ist)
    Exit;
  End;

end;

procedure TForm1.FTPDownloadWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
  with FTPProgress do
  begin
    Max := AWorkCountMax;
    Position := 0;
    Visible := true;
  end;
end;

procedure TForm1.FTPDownloadWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
  with FTPProgress do
    Position := AWorkCount;
end;

procedure TForm1.FTPDownloadWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  with FTPProgress do
    Visible := false;
end;
$2B or not $2B

Geändert von himitsu ( 6. Nov 2013 um 15:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
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