Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Per Indy-FTP gantzen Ordener downlorden? (https://www.delphipraxis.net/113086-per-indy-ftp-gantzen-ordener-downlorden.html)

Deltachaos 2. Mai 2008 12:30


Per Indy-FTP gantzen Ordener downlorden?
 
Ich möchte ein 'Backup' programm für meine Hompage schreiben.
Ist ja auch nicht so das Problem. nur ich wein nicht wie ich einen gantzen ordner downlorden kann.

Biss jetzt habe ich das
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Present: TDateTime;
     Year, Month, Day: Word;
begin
//  DecodeDate(Present, Year, Month, Day);
  form1.Show;
  form1.Label1.Caption:='Setze Port...';
  form1.IdFTP1.Port:=21;
  form1.Label1.Caption:='Übertrage Username...';
  form1.IdFTP1.Username:='tja';
  form1.Label1.Caption:='Übertrage Password...';
  form1.IdFTP1.Password:='tja';
  form1.Label1.Caption:='Verbinde mit Host...';
  form1.IdFTP1.Host:='fos-clan.com';
  form1.Label1.Caption:='Host-setzen fertig! Warte auf Antwort vom Server...';
  form1.IdFTP1.Connect;
  form1.Label1.Caption:='Verbindung Hergestellt!';
end;

marabu 2. Mai 2008 16:42

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Hallo Maximilian,

du wirst dir mit der Methode List() die Namen der Dateien im Verzeichnis besorgen und diese dann einzeln mittels Get() holen müssen.

Grüße vom marabu

Deltachaos 2. Mai 2008 20:02

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Zitat:

Zitat von marabu
Hallo Maximilian,

du wirst dir mit der Methode List() die Namen der Dateien im Verzeichnis besorgen und diese dann einzeln mittels Get() holen müssen.

Grüße vom marabu

ah danke

Deltachaos 2. Mai 2008 20:52

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Zitat:

Zitat von Deltachaos
Zitat:

Zitat von marabu
Hallo Maximilian,

du wirst dir mit der Methode List() die Namen der Dateien im Verzeichnis besorgen und diese dann einzeln mittels Get() holen müssen.

Grüße vom marabu

ah danke

irgendwie ist mir das noch so ne bisschen zu ungenau.

Ich hab biss etz das:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var slist: TStrings;
begin
  SList := TStringList.Create;
  IdFTP1.List(slist,'*',false);
  Listbox1.Items:=sList;
end;
Verbindung usw. natürlich vorausgesetzt.
Ich sehe ja auch die Ordner und dateien aber sie soll das program wisse was ein ordner ist und was nicht an der endung oder keine endung=ordner endung=Datei.
gut ok dan lässt man in den ordner wechseln und da dan nochml lesen!
Auserdem habe ich noch nie mit Listboxen gearbeitet.

Kann ich ein kleinen Denkanstos haben?

marabu 2. Mai 2008 21:35

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Hier dein Denkanstoß:

Delphi-Quellcode:
procedure GetFilenames(ftp: TIdFtp; const mask: string; s: TStrings);
var
  i: Integer;
  items: {IdFtpList.}TIdFtpListItems;
begin
  s.BeginUpdate;
  try
    s.Clear;
    FTP.List(nil, mask, True);
    items := FTP.DirectoryListing;
    for i := 0 to Pred(items.Count) do
      if items[i].ItemType = ditFile then
        s.Add(items[i].FileName);
  finally
    s.EndUpdate;
  end;
end;
Getippt und nicht getestet.

Gute Nacht.

Deltachaos 3. Mai 2008 08:52

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Zitat:

Zitat von marabu
Hier dein Denkanstoß:

Getippt und nicht getestet.

Gute Nacht.

Schon in der erstten zeile ist ein fehler.

Code:
[Fehler] Unit1.pas(64): Undefinierter Bezeichner: 'TIdFTPListItems'

Der.Kaktus 3. Mai 2008 09:03

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Zitat:

...
Schon in der erstten zeile ist ein fehler.

Code:
[Fehler] Unit1.pas(64): Undefinierter Bezeichner: 'TIdFTPListItems'

Hallo, vielleicht solltest Du noch die Unit einbinden.

Delphi-Quellcode:
uses IdFTPList;

Deltachaos 3. Mai 2008 09:23

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Zitat:

Zitat von Der.Kaktus
Zitat:

...
Schon in der erstten zeile ist ein fehler.

Code:
[Fehler] Unit1.pas(64): Undefinierter Bezeichner: 'TIdFTPListItems'

Hallo, vielleicht solltest Du noch die Unit einbinden.

Delphi-Quellcode:
uses IdFTPList;

hab ich jetzt gemacht. funktionirt ja soweit.

aber es werden ja nur die Daten des Hauptverzeichnisses gelistet.

sol aber etwa so werden:

Code:
index.php
blabla.irgentwas
ordner/blabla.irgentwas
ordner/ordner/blabla.irgentwas
u.s.w.

Das problem ich weis weder Anzahl der Daten noch anzahl der Ordner und Unterordner. :wall:

Fussball-Robby 3. Mai 2008 09:30

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Schonmal gesucht? hier wurde ein Code gepostet, mit dem ein Ordner auf einem FTP-Server rekursiv durchsucht und das Ergebnis aufgelistet wird. Wenn du das dann hast, sollte das downloaden auch nicht mehr schwer sein.

Mfg

Deltachaos 3. Mai 2008 10:29

Re: Per Indy-FTP gantzen Ordener downlorden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Fussball-Robby
Schonmal gesucht? hier wurde ein Code gepostet, mit dem ein Ordner auf einem FTP-Server rekursiv durchsucht und das Ergebnis aufgelistet wird. Wenn du das dann hast, sollte das downloaden auch nicht mehr schwer sein.

Mfg

hm, eigenlich hatte ich schon gesucht.
Irgendwie funktionirt das bei mir ich so wirklich. eigentlich gar nicht.

Delphi-Quellcode:
procedure FindAllFilesFTP(FTPCon: TIdFTP; Directory: String; FileList,DirList: TStrings; WithSubDirs, ClearList: Boolean);
  procedure ScanDir(const Directory,SubDir: String; WithDir: Boolean);
  var
    i: Integer;
  begin
    FTPCon.ChangeDir(Directory + SubDir);
    FTPCon.List(filelist);
    for i := 2 to FTPCon.DirectoryListing.Count-1 do
      if FTPCon.DirectoryListing.Items[i].ItemType = ditFile then
      begin
        if WithDir then FileList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName)
        else FileList.Add(FTPCon.DirectoryListing.Items[i].FileName);
      end else if FTPCon.DirectoryListing.Items[i].ItemType = ditDirectory then
        DirList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName + '/');

    if WithSubDirs then
    begin
      for i := 2 to FTPCon.DirectoryListing.Count-1 do
        if FTPCon.DirectoryListing.Items[i].ItemType = ditDirectory then
          ScanDir(Directory + SubDir,FTPCon.DirectoryListing.Items[i].FileName + '/',True);
    end;
  end;

begin
  if not FTPCon.Connected then Exit;
  FileList.BeginUpdate;
  DirList.BeginUpdate;
  try
    if ClearList then
    begin
      FileList.Clear;
      DirList.Clear;
    end;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '/' then
      Directory := Directory + '/';
    ScanDir(Directory,'',False);
  finally
    DirList.EndUpdate;
    FileList.EndUpdate;
  end;
end;


procedure TForm1.Button4Click(Sender: TObject);
var slist, dir: TStrings;
    anzahl, sl: integer;
begin
  FindAllFilesFTP(IdFTP1, form1.dir.text, slist, dir, true, false);
  form1.ListBox1.Items:= slist;
  form1.ListBox2.Items:= dir;
end;
Programm startet zwar ich bockomme die Meldung das Das Verzeichniss nicht existirt.

und wenn ich hier:

Delphi-Quellcode:
procedure FindAllFilesFTP(FTPCon: TIdFTP; Directory: String; FileList,DirList: TStrings; WithSubDirs, ClearList: Boolean);
  procedure ScanDir(const Directory,SubDir: String; WithDir: Boolean);
  var
    i: Integer;
  begin
    FTPCon.ChangeDir(Directory + SubDir);
    FTPCon.List; //<<< Hier
    for i := 2 to FTPCon.DirectoryListing.Count-1 do
      if FTPCon.DirectoryListing.Items[i].ItemType = ditFile then
      begin
        if WithDir then FileList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName)
nicht "(form1.listbox1.items)" eintrage leut der code mit der meldung
Code:
[Fehler] Unit1.pas(85): Nicht genügend wirkliche Parameter
gar nicht.

und ich finde idAllFTPListParsers irgentwie nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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