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