![]() |
nur Teile einer Datei per FTP vom Server laden
Hallo Leute,
zum Herunterladen von Datendateien per FTP verwende ich
Delphi-Quellcode:
Das funktioniert soweit auch.
IdFTP1.Get(quellfilename, zielpath + zielfile, false);
Die bereitgestellten Datendateien (ASCII-Text) sind oftmals sehr groß (> 18 MB) und haben immer den gleichen Dateinamen (ältere erhalten die Endung .000 bis .999). Um ein doppeltes Lesen von bereits geladenen Dateien zu vermeiden, möchte ich nur die ersten 64 Byte einer jeden Datei laden. Die darin enthaltene Information ist im Gegensatz zu den Dateinamen eineindeutig zuzuordnen. Kann mir jemand bei der Lösung helfen? mfg eddy |
Re: nur Teile einer Datei per FTP vom Server laden
Hi!
Du könntest den BITS Service von Windows nutzen. Dieser unterstützt das Herunterladen von Teilen einer Datei (siehe FileRange). Aber das ist nur ein Tip am Rande, denn du suchst sicherlich etwas anderes. :) |
Re: nur Teile einer Datei per FTP vom Server laden
also so weit ich weiss, kann man bei FTP nicht sagen "Hol mir nur die ersten 64 Bytes von Datei 'filename' und ignorier den Rest".
eine Idee hätte ich allerdings: - überprüfe (mit einem zweiten Thread), wieviel von der datei per FTP schon gekommen ist. - Wenn es 64 KB oder mehr ist, dann kopiere die Datei und breche dann den FTP-Transfer ab. - anschliessend kannst Du die Datei auf 64 K abschneiden und dann weiterverarbeiten. |
Re: nur Teile einer Datei per FTP vom Server laden
Soweit ich weiss kann man in der FTP Komponente den Fortschritt abfragen(Progress) dort könnte man auch die Datei überprüfen, somit würde das erstellen einen Threads entfallen.
|
Re: nur Teile einer Datei per FTP vom Server laden
Du musst zunächst die Puffergröße für Deinen Test verringern, z.B.:
Delphi-Quellcode:
Dann musst Du einen OnWork-Handler zuweisen, in dem Du den Transfer nach einer bestimmten Anzahl von Bytes abbrichst:
IDFtp1.RecvBufferSize := 128;
Delphi-Quellcode:
Dann kannst Du den Inhalt prüfen, die Puffergröße wieder erhöhen und den OnWork-Handler deaktivieren bzw. anders steuern und den echten Transfer starten. Du kannst die Daten auch in einen Memory-Stream schreiben, so unterbleiben die Festplattenzugriffe.
procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer); begin if AWorkCount > 64 then IdFTP1.Abort; end; |
Re: nur Teile einer Datei per FTP vom Server laden
Hallo Leute,
vielen Dank für Eure Antworten. Die Fassung von Union ist die Lösung, die mich meinem Ziel am nächsten bringt. Allerdings gibt es noch eine häßliche Fehlermeldung (Transfer abortet), die vom Nutzer bestätigt werden muß und somit in einer Schleife, die mehrere Dateien überprüfen soll, stört. Vielleicht kann man dagegen auch noch etwas unternehmen. mfg eddy |
Re: nur Teile einer Datei per FTP vom Server laden
..die Fehlermeldung geht nicht weg oder läßt sich unterdrücken wenn Du
idftp1.abort in ein try except o.ä. einpackst? Grüße Klaus |
Re: nur Teile einer Datei per FTP vom Server laden
Soweit ich weiß, gibt es irgendeinen Befehl, womit du eine Datei aufteilst (z.B. Byte 1-4) und dann nur das lädst (kann man super sich selber was bauen um was schneller zu laden :) )
|
Re: nur Teile einer Datei per FTP vom Server laden
Hallo Klaus01,
nein, mit
Delphi-Quellcode:
ist die Fehlermeldung nicht unterdrückbar.
try ... except ... end
Vielleicht gibt es ein global einstellbaren Parameter in IdFTP, damit die Fehlermeldung unterdrückt wird, aber ich habe nichts dergleichen gefunden. Ich habe in IdGlobal auch die Stelle gefunden, die die Fehlermeldung generiert, aber noch keine, um diese zu unterbinden. mfg eddy |
Re: nur Teile einer Datei per FTP vom Server laden
Hallo TurboMartin,
wenn Dir nun auch noch einfällt, wie dieser Befehl lautet, käme ich vielleicht auch weiter. mfg eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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