![]() |
Ftp.directorylisting
Servus ich hab mal wieder ein kleines Problem ...
wenn ich Verzeichnis Daten von einem Ftp Server laden will mach ich das ja so :
Delphi-Quellcode:
das is jetzt nur ein kleines Beispiel, ich frage da noch mehr ab...
list:=Tstringlist.Create;
ftp.List(list,'',true); for i:=0 to ftp.DirectoryListing.count-1 do begin dateisize[i]:=ftpserver.DirectoryListing.Items[i].Size; dateidatum[i]:=ftpserver.DirectoryListing.Items[i].ModifiedDate; end; list.free; mein Problem besteht aber darin, dass ich bei dieser Zeile
Delphi-Quellcode:
eine "EAccessViolation" bekomme...
for i:=0 to ftp.DirectoryListing.count-1 do
Genaue Fehlermeldung: "Zugriffsverletzung bei Adresse 00404894 in Modul 'bla.exe'. Lesen von Adresse 00000000" was kann ich dagegen tun ?? Wenn ich die items nicht in einer Schleife, abfrage, sondern nur z.B. ftp.directorylisting.items[0].size abfrage, dann kommt eben keine Fehlermeldung.. mir scheints so als sein directorylisting nicht initialisiert oder erstellt worden, wenn ich aber vor dem list
Delphi-Quellcode:
eintippel, dann kommt der gleiche feher!...
ftp.directorylisting.creat
Danke schonmal im Vorraus |
Re: Ftp.directorylisting
welche ftp-komponente benutzt du??
|
Re: Ftp.directorylisting
aeh hups habs ja mal wieder uebel verrafft :>
tuerlich benutz ich indy9, bzw idftp ... lol |
Re: Ftp.directorylisting
ich hab jetzt rausgefunden, dass es bei manchen FTP Servern funktioniert und bei manchen nicht... woran kann das liegen ?
|
Re: Ftp.directorylisting
also ich habs jetzt so gelöst, dass ich zuerst nur eine liste mit den dateinamen abfrage und dann in einer function alle anderen daten ab, das geht soweit...
weiss aber nicht, wiexo es nicht alles auf einmal geht, was mich immernoch interessieren wuerde, da meine Lösung EXTREM inperformant is... |
Re: Ftp.directorylisting
liegt daran das die verschiedenen ftp-server das list-commando unterschiedlich interpretieren, hamm sich wohl nicht alle programmierer an den standard gehalten. Manche ftp server liefern nur die Dateinamen beim listing zurück und andere eben noch die attribute dazu..
|
Re: Ftp.directorylisting
ja, aber wenn ich immer einzeln
Delphi-Quellcode:
für jeden dateinamen abruf und dann eben die dateidaten mit
ftp.list(list,dateiname,true);
Delphi-Quellcode:
abfrag, dann geht es...
ftp.directorylisting.items[0].size
das is ja grad das witzige/nervende :> naja cYa |
Re: Ftp.directorylisting
Tja, das haben die Programmierer von Indy (meiner Meinung nach) verbockt.
Die Liste mit den Dir-Entries wird nämlich mit jedem Zugriff kürzer. Einfach gesagt: Wenn man ein Entry abfragt, wird es danach automatisch gelöscht. Dämlich aber nicht zu ändern. Meine Lösung:
Delphi-Quellcode:
Mit liste1.items kann man dann arbeiten, ohne Angst vor Verflüchtigung haben zu müssen. :lol:
while directorylisting.count>0 do begin
liste1.items.add(directorylisting.items[0]); end; Hab ich nach 7,5 Stunden Frustation unter Schmerzen rausgefunden. Hoffe, das hat die Klarheiten beseitigt. Gruß, ShortbRead |
Re: Ftp.directorylisting
tHx ich tests mal ... :>
|
Re: Ftp.directorylisting
Hi,
Delphi-Quellcode:
Mir ist aufgefallen, dass der Rückgabe-String fehlerhaft ist, sobald ein Leerzeichen am Ende des Dateinamens zu finden ist. Kann das jemand bestätigen bzw. weiß jemand, ob es einen Fix dafür schon gibt?
IdFTP1.DirectoryListing.Items[x].FileName
PS: Ich nutze derzeit Indy9 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz