Autor Beitrag
Listing
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 26.12.06 22:35 
Hi,
es tut mir leid dass ich euch jetzt noch einmal nerven muss :(
Aber ich habe dazu im ganzen Forum leider nichts gefunden:
Es geht darum per IndyFTP einen gesamten Ordner herunterzuladen
(dieser hat nähmlich weit über 1000 Dateien und Unterordner...)

Ich bin schon soweit, dass ich den Inhalt des Ordners mit Ftp.list
herrausbekomme und einzelne Dateien downloaden kann.

Viele Grüße und schöne Feiertage :-)

Applikation:
user defined image
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 22:47 
Wenn du den Inhalt des Ordners hast, wo ist dann das Problem? Ich hatte zunächst gedacht, es wäre das Problem diese Liste zu bekommen.
Dann musst du doch nur mit einer Schleife alle Dateien durchgehen.

user profile iconListing hat folgendes geschrieben:
es tut mir leid dass ich euch jetzt noch einmal nerven muss :(
Das Forum ist ja dafür da, Fragen zu beantworten ;-)
Listing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 26.12.06 22:53 
user profile iconjaenicke hat folgendes geschrieben:
Wenn du den Inhalt des Ordners hast, wo ist dann das Problem? Ich hatte zunächst gedacht, es wäre das Problem diese Liste zu bekommen.
Dann musst du doch nur mit einer Schleife alle Dateien durchgehen.

user profile iconListing hat folgendes geschrieben:
es tut mir leid dass ich euch jetzt noch einmal nerven muss :(
Das Forum ist ja dafür da, Fragen zu beantworten ;-)


der Inhalt ist "gecrypted" :D

1. Ich kann nicht zwischen Ordnern und normalen Dateien Unterscheiden
2. Der string ist iergendwie [ACCESS] 1 ftp ftp [iergendeine Anzahl an leerzeichen] [SIZE] [TIME] [FILE]
>> Wie kann ich das extrahieren? Ich finde da kein "wiederkehrendes Muster"

Danke schonmal
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 23:00 
Oh, Moment, dann liste mal lieber so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  FolderContents: TIdFTPListItems;
begin
  Self.FTPClient.List(nil);
  FolderContents := Self.FTPClient.DirectoryListing;
  for i := 0 to FolderContents.Count - 1 do
  begin
    FolderContents.Items[i].FileName

Und so weiter, damit kannst du dann ja arbeiten denke ich... ;-)
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Di 26.12.06 23:05 
user profile iconListing hat folgendes geschrieben:
user profile iconjaenicke hat folgendes geschrieben:
Wenn du den Inhalt des Ordners hast, wo ist dann das Problem? Ich hatte zunächst gedacht, es wäre das Problem diese Liste zu bekommen.
Dann musst du doch nur mit einer Schleife alle Dateien durchgehen.

user profile iconListing hat folgendes geschrieben:
es tut mir leid dass ich euch jetzt noch einmal nerven muss :(
Das Forum ist ja dafür da, Fragen zu beantworten ;-)


der Inhalt ist "gecrypted" :D

1. Ich kann nicht zwischen Ordnern und normalen Dateien Unterscheiden
2. Der string ist iergendwie [ACCESS] 1 ftp ftp [iergendeine Anzahl an leerzeichen] [SIZE] [TIME] [FILE]
>> Wie kann ich das extrahieren? Ich finde da kein "wiederkehrendes Muster"

Danke schonmal


Ich denke mal das die Abstände keine Leerzeichen sondern ein TAB ist.

ausblenden Delphi-Quelltext
1:
2:
3:
//#9 = TAB
//TAB finden
pos(#9, DeinString);


Ich würde einfach jeden Tab suchen und alle Zeichen die davor stehen löschen. So erhältst du den lezten String, also den Datei bzw. Ordnername. Ob es ein Ordner oder eine Datei ist kannst du 1. festsellen indem du überprüfst ob eine Dateiendung dabei steht und 2. ob die Datei 0 Byte groß ist.

Ciao,
Andy
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 23:08 
Ach so, gut dass du den Dateityp ansprichst:
Bei meinem Source lässt sich der mit if FolderContents.Items[i].ItemType <> ditDirectory then feststellen...

// EDIT:
Ach so: Ich nehme an, dass du die ganzen zusätzlichen Infos erhälst, weil du beim List Befehl nicht als dritten Parameter (der heißt ja ADetails) False angegeben hast... ;-)
Wenn du da False angibst solltest du IMHO nur die Dateinamen erhalten...
Listing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 26.12.06 23:26 
user profile iconjaenicke hat folgendes geschrieben:
Self.FTPClient.List(nil);

Wofür steht denn da FTPClient??
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 23:28 
Das ist das TIdFTPClient-Objekt, musst natürlich deinen Variablennamen nehmen ;-)
Da du deinen Quelltext nicht gepostet hast, kann ich den ja nicht wissen... :lol:
Listing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 26.12.06 23:38 
user profile iconjaenicke hat folgendes geschrieben:
Das ist das TIdFTPClient-Objekt, musst natürlich deinen Variablennamen nehmen ;-)
Da du deinen Quelltext nicht gepostet hast, kann ich den ja nicht wissen... :lol:


ausblenden Delphi-Quelltext
1:
2:
3:
 idFTP1.List();
    FolderContents := idFTP1.DirectoryListing;
    ShowMessage('There are currently ' + IntToStr(FolderContents.Count) + ' items in the folder!');

Gibt immer aus "There are currently 0 Items in the folder!"

Wenn ich "Self." davorsetze sagt er
[Pascal Fehler] MainForm.pas(47): E2003 Undefinierter Bezeichner: 'idFTP1'

:-/

Moderiert von user profile iconChristian S.: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.12.06 23:49 
Delphi- statt Zitat-Tags wären schöner ;-). Aber das nur nebenbei.

Das Self brauchst du für eine lokale Variable nicht, das ist schon richtig.
Jedenfalls wirst du wohl das Verzeichnis nicht richtig gesetzt haben...
Listing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 26.12.06 23:56 
user profile iconjaenicke hat folgendes geschrieben:
Delphi- statt Zitat-Tags wären schöner ;-). Aber das nur nebenbei.

Das Self brauchst du für eine lokale Variable nicht, das ist schon richtig.
Jedenfalls wirst du wohl das Verzeichnis nicht richtig gesetzt haben...

Das verstehe ich jetzt nicht, wieso geht denn dann

ausblenden Delphi-Quelltext
1:
2:
IdFTP1.List(Slist,'*',false);
und idFTP1.List('*', false);
nicht?

Was soll ich denn mit dem Verzeichnis anderes machen?
Ich kann ja auch ohne Probleme jetzt aus diesem Verzeichnis downloaden

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.12.06 00:00 
Hmm, also wenn das Verzeichnis korrekt gesetzt ist, dann verstehe ich das auch nicht. Bei mir hat das Listing dann so funktioniert.
Listing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 27.12.06 01:51 
Mein Algorithmus funktioniert jetzt einigerma0en aber wenn ein Ordner in den er downloaden soll
noch nicht existiert gibt mein Programm sofort ein Fehler aus...
Kann ich das iergendwie verhindern?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.12.06 01:54 
Du kannst ja mit ForceDirectories den Ordner vorher erstellen. ForceDirectories stellt sicher, dass der übergebene Ordner existiert (legt ihn und alle nicht existierenden Oberordner automatisch an).
Listing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 27.12.06 03:37 
user profile iconjaenicke hat folgendes geschrieben:
Du kannst ja mit ForceDirectories den Ordner vorher erstellen. ForceDirectories stellt sicher, dass der übergebene Ordner existiert (legt ihn und alle nicht existierenden Oberordner automatisch an).

Hmm ok jetzt geht es endlich,
vielen Dank war nen schweres Teil aber ich bin froh, dass ich es gemacht hab.
Man lernt ja immer dazu.

Nach so langem Coden bin ich jetzt schon nen bisschen Müde :-)

Also gute Nacht @ all und ein spezieller Dank an jaenicke