Einzelnen Beitrag anzeigen

Kruimel

Registriert seit: 23. Jul 2007
2 Beiträge
 
Delphi 7 Personal
 
#1

FTPList beim Server und Client...?

  Alt 23. Jul 2007, 18:29
Hallo Leute,

Ich bin neu hier im Forum, habs aber schon sehr oft gebraucht um Probleme zu lösen. Ihr bietet hier wirklich Super Hilfe wies mir scheint!

Nun zu meinem Problem:
Ich versuche gerade mit den Indy 10 Komponenten IdFTPServer und IdFTP einen funktionierenden FTP-Server und FTP-Client zu basteln. Das ganze soll später übers eigene Netzwerk zwischen 2 PCs laufen. Also nicht direkt übers Internet. An sich läuft der Server. Da bin ich schonmal ganz zufrieden mit. Deswegen hab ich mich ans Programmieren des Clients gemacht. Login, Directroy-Change und Upload funktioniert auch einwandfrei. Jetzt möchte ich aber noch irgendwie die Ordner im Verzeichnis auf dem Server in einer ListBox haben, und in einer zweiten ListBox die Dateien dieses Verzeichnisses. Dazu dachte ich, ich mach das mit
IdFTP1.List(ListBox1.Items,'',false); Da kommen aber Ordner und alle Dateien. Also, gesucht in Google & Co, und gefunden dass man im 2. Parameter z.b. '*' setzen soll um nur Ordner zu bekommen. Leider gibt er dann bei mir gar nichts mehr zurück. Was ich jedoch ausgefunden habe, ist, dass wenn ich diesen Parameter im Quellcode des Servers setze, das schon funktioniert... Hier die beiden Quellcodes:
Server:
Delphi-Quellcode:
procedure TForm1.IdFTPServer1ListDirectory(ASender: TIdFTPServerContext;
  const APath: String; ADirectoryListing: TIdFTPListOutput; const ACmd,
  ASwitches: String);
var
  LFTPItem :TIdFTPListItem;
  SR : TSearchRec;
  SRI : Integer;

begin
  Memo1.Lines.Add('Client lists Directory: '+APath);
  ADirectoryListing.DirFormat := doUnix;
  SRI := FindFirst(HomeDir + APath + '*.*',faAnyFile - faHidden - faSysFile, SR);
  While SRI = 0 do
  begin
    LFTPItem := ADirectoryListing.Add;
    LFTPItem.FileName := SR.Name;
    LFTPItem.Size := SR.Size;
    LFTPItem.ModifiedDate := FileDateToDateTime(SR.Time);
    if SR.Attr = faDirectory then
      LFTPItem.ItemType:= ditDirectory
    else
     LFTPItem.ItemType:=ditFile;
    SRI := FindNext(SR);
  end;
  FindClose(SR);
  SetCurrentDir(HomeDir + APath + '..');
end;
Im Client:
Delphi-Quellcode:
procedure TForm1.ListAll;
var
  DirList: TIdFTPListItems;
  i: integer;

begin
  IdFTP1.List(ListBox1.Items,'*.ini',false);
  DirList:=IdFTP1.DirectoryListing;

  ListBox2.Items.Add(IntToStr(DirList.Count-1));

  for i:=0 to (DirList.Count-1) do
  begin
    ListBox2.Items.Add(DirList.Items[i].FileName);
    ListBox2.Items.Add(IntToStr(i));
  end;

  Memo1.Lines.Add('Listed dir: '+IdFTP1.RetrieveCurrentDir);
end;
Vielleicht wisst ihr ja was ich da falsch gemacht habe(?). Ich hab nichts gefunden, auch die Suchfunktion des Forums hat mir bisher nichts geholfen.
Als zweites hab ich dann noch IdFTP1.DirectoryListing versucht wie ihr oben seht. Da kommt aber nichts rein... Der Wert in RirList.Count bleibt 0.
Nun hab ich dazu im Forum gefunden dass das behoben werden kann indem man IdAllFTPListParsers in die uses einbindet. Das hat mir bisher aber auch nichts geholfen.

Ich hoffe ihr könnt mir helfen!
Schonmal vielen Dank!

Gruss
Kruimel
  Mit Zitat antworten Zitat