Entwickler-Ecke
Internet / Netzwerk - Gesamten Ordner per FTP downloaden
Listing - Di 26.12.06 22:35
Titel: Gesamten Ordner per FTP downloaden
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
http://Ftp.list
herrausbekomme und einzelne Dateien downloaden kann.
Viele Grüße und schöne Feiertage :-)
Applikation:
jaenicke - 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.
Listing 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 - Di 26.12.06 22:53
jaenicke 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.
Listing 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 - Di 26.12.06 23:00
Oh, Moment, dann liste mal lieber so:
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. - Di 26.12.06 23:05
Listing hat folgendes geschrieben: |
jaenicke 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.
Listing 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.
Delphi-Quelltext
1: 2: 3:
| 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 - 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 - Di 26.12.06 23:26
jaenicke hat folgendes geschrieben: |
Self.FTPClient.List(nil);
|
Wofür steht denn da FTPClient??
jaenicke - 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 - Di 26.12.06 23:38
jaenicke 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: |
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
Christian S.: Quote- durch Delphi-Tags ersetzt
jaenicke - 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 - Di 26.12.06 23:56
jaenicke 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
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
Christian S.: Delphi-Tags hinzugefügt
jaenicke - 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 - 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 - 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 - Mi 27.12.06 03:37
jaenicke 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!