Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi nur Teile einer Datei per FTP vom Server laden (https://www.delphipraxis.net/75302-nur-teile-einer-datei-per-ftp-vom-server-laden.html)

eddy 17. Aug 2006 11:53


nur Teile einer Datei per FTP vom Server laden
 
Hallo Leute,

zum Herunterladen von Datendateien per FTP verwende ich

Delphi-Quellcode:
IdFTP1.Get(quellfilename, zielpath + zielfile, false);
Das funktioniert soweit auch.

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

chaosben 17. Aug 2006 11:57

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. :)

RavenIV 17. Aug 2006 12:01

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.

Cyberaxx 17. Aug 2006 12:50

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.

Union 17. Aug 2006 12:55

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:
IDFtp1.RecvBufferSize := 128;
Dann musst Du einen OnWork-Handler zuweisen, in dem Du den Transfer nach einer bestimmten Anzahl von Bytes abbrichst:
Delphi-Quellcode:
procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
   if AWorkCount > 64 then
      IdFTP1.Abort;
end;
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.

eddy 17. Aug 2006 17:46

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

Klaus01 17. Aug 2006 17:51

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

TurboMartin 17. Aug 2006 17:57

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 :) )

eddy 17. Aug 2006 18:12

Re: nur Teile einer Datei per FTP vom Server laden
 
Hallo Klaus01,

nein, mit
Delphi-Quellcode:
try ... except ... end
ist die Fehlermeldung nicht unterdrückbar.

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

eddy 17. Aug 2006 18:14

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 01:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz