![]() |
Download mit IdFtp.get erzeugt 5byte-Dateien
Hallo
Ich Arbeite derzeit mit Delphi2009 und bringe ein altes Project von mir auf den aktuellsten Stand. Dabei lade ich von diversen FTP-Servern jeweils ein Verzeichnis herunter und lege die Dateien in einer Struktur auf der Festplatte zur weiteren Bearbeitung aus. Das hat soweit auch immer gut geklappt. Nun hab ich schon mitgekommen das die Erkennung der Dateinamen nicht mehr so ist wie bei Delphi2007 - aber das hab ich hinbekommen. Mein Programm liest nun wieder korrekt die Dateien in dem ftp-Verzeichnis ein und zeigt in der Listbox die Namen und die Dateigröße korrekt an. Nach einer Prüfung ob die Datei schon auf der Platte ist startet der Download. Die erzeugten Dateien sind aber immer nur 5 Byre groß. Ein normaler Zugriff mit beliebigen FTP-Programmen geht ohne Probleme. Hier ein Auszug aus dem Script
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
var i : integer; count : integer; name : string; basedir : string; // Verzeichnis auf der Festplatte currentdir : string; // Ordner auf dem Server ftplist : TIdFtpListItems; ftpfile : TFileStream; begin if IdFTP1.connected = false then begin IdFTP1.Username := 'xxxxxx'; IdFTP1.Password := 'xxxxxx'; IdFTP1.Host := '123.123.123.123'; IdFTP1.Passive := TRUE; basedir := 'z:\projekt\eingang-xxx\'; currentdir := 'subdir123'; IdFTP1.Connect; IdFTP1.ChangeDir(currentdir); IdFTP1.List; ftplist := IdFTP1.DirectoryListing; count := ftplist.Count; for i := 1 to Count do begin name := ftplist[i-1].FileName; if ftplist[i-1].ItemType = ditFile then begin Listbox1.items.add(name+' ('+IntToStr(ftplist[i-1].Size)+')'); if FileExists(basedir+currentdir+'\'+name) = FALSE then IdFTP1.Get(name,basedir+currentdir+'\'+name); // ALTERNATIV habe ich das auch schon versucht mit dem gleichen Ergebnis. // ftpfile := TFileStream.Create(basedir+currentdir+'\'+name, fmCreate); // try // IdFTP1.Get(name,ftpfile); // finally // FreeAndNil(ftpfile); // end; end; end; IdFTP1.Quit; iDFTP1.Disconnect; end; end; |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Zitat:
Eventuell hilft auch ein Update auf die neueste Indy Version. Testweise würde ich lokal einen eigenen FTP Server wie z.B. FileZilla starten und prüfen, ob es dort besser funktioniert. Könnte es ein Rechteproblem sein? |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Zitat:
das wird wenn Du einen FTP Server abfragst nicht funktionieren. Grüße Klaus |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Zitat:
Beim Vergleich der Originaldateien vom Server und denen auf meiner Festplatte sehe ich, das die ersten 5 Byte identisch sind. Probleme mit Rechten o.ä. kann ich eigentlich ausschliessen. Ein beliebiges FTP-Programm funktioniert einwandfrei für diese Aufgabe. |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Zitat:
Verstehe deine Anmerkung aber leider nicht. Warum sollte das nicht funktionieren ? Ich prüfe ob eine Datei LOKAL schon vorhanden ist bevor ich sie vom FTP-SERVER lade. Gerade dieser Teil funktioniert eigentlich perfekt. Wenn ich testweise eine einzelne Datei lokal bei mir lösche in dem Ordner wird auch nur genau diese eine vom Server neu geladen. Da sehe ich nun wirlich kein Problem. |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Zitat:
Grüße Klaus |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Hallo
Ich komme da nicht so richtig weiter. Ingesamt lade ich von 5 Servern Dateien herunter. Das beschriebene Problem mit den 5 Byte-Dateien ist nur bei einem vorhanden. Von den anderen 4 Servern werden die Dateien geladen - allerdings nur von 3 ohne Probleme. Beim anderen Server werden die Dateien zwar geladen aber Zip Archive z.B. sind defekt und in PDF-Dateien sind leere Seiten drin. Alles Erscheinungen die ich beim Download mit z.B. WSFTP nicht habe und auch unter Delphi2007 nicht aufgetaucht sind - "damals" auch schon mit Indy10. Frage daher : Gibt es andere "brauchbare" FTP-Komponenten oder noch irgendwelche Optionen die ich vergessen haben könnte ? |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
OK - Lösung gefunden.
Keine Ahnung warum das auf einmal anders ist. Bisher war es doch wohl immer so das
Delphi-Quellcode:
als Standard gesetzt ist. Bei den Indys im Lieferumfang von Delphi 2009 scheint das aber nicht mehr so zu sein.
IdFTP1.TransferType := ftBinary;
Nachdem ich die Zeile hinzugefügt habe funktioniert alles wieder einwandfrei. |
Re: Download mit IdFtp.get erzeugt 5byte-Dateien
Hi,
Zitat:
Und an die müssen (sollten) wir Programmier und nunmal alle halten... Ist aber sowieso besser, selbst den Transfermode festzulegen. Deswegen kann man das ja auch in FileZilla und Co. Es gibt viele FTP Befehle, die diesen nämlich zurücksetzen. Gruß Assertor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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