Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bestimmte Teile einer Datei in Stream laden (https://www.delphipraxis.net/117062-bestimmte-teile-einer-datei-stream-laden.html)

Björn Ole 10. Jul 2008 23:15


Bestimmte Teile einer Datei in Stream laden
 
Nabend. :cheers:

Hätte da mal ein kleines Problem.
Ich will Dateisegmente unterschiedlicher Größe in einen (File)Stream laden.
Z.B. brauche ich mal die ersten 400 Bytes einer Datei, anschließend ab dem 2000. Byte die nächsten 700 Bytes.

Zur Not wär ich auch mit einem Umkopieren in ein MemoryStream zufrieden, aber ich möchte den Speicher nicht unnötig belasten.

Was ich vorhabe: Die geladenen Segmente werden analysiert und per Indys IdHTTP.Post auf einen Webserver hochgeladen.

Vielleicht kann mir ja jemand dabei helfen.
Danke, Björn.

Christian Seehase 10. Jul 2008 23:38

Re: Bestimmte Teile einer Datei in Stream laden
 
Moin Björn,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

An welcher Stelle kommst Du denn jetzt nicht weiter?
Grundsätzliche Probleme mit dem Laden aus einem FileStream?
Auswahl einer Position?

Björn Ole 11. Jul 2008 00:06

Re: Bestimmte Teile einer Datei in Stream laden
 
Hi Christian,

nochmal andersrum formuliert: ich weiß nicht, wie ich den Stream bearbeiten muss, damit ich ihn anschließen einfach per Post(MyURL, MyStream) weitergeben kann. Per .Position kann ich an die gewünschte Stelle springen, aber wie kann ich die Länge der zu sendenden Daten festlegen?

Gruß.

gmc616 11. Jul 2008 00:41

Re: Bestimmte Teile einer Datei in Stream laden
 
Auch von mir ein Herzliches Willkommen!

Welche Länge willst du denn wo festlegen?

Die Länge des (ich nehme mal an) FileStreams kriegst du raus, wenn du mit Seek
ans Ende der Datei springst, dort dir Position die Position geben lässt und anschließend an die gewünschte Position hüpfst. Die Länge der Daten wäre dann DateiEnde - Position.


Delphi-Quellcode:
var
  fs : TFileStream;

  DateiEnde,
  Laenge : int64;
[ ... ]

fs.Seek (0,soFromEnd)
DateiEnde := fs.Position;
fs.Seek (DeinePosition,soFromBeginning);

Laenge := DateiEnde - DeinePosition;
Um den Stream segmente-weise auszulesen kannst
Delphi-Quellcode:
var
  tmpStream : TMemoryStream:

[ ... ]

SegmentLaenge := 400;

tmpStream.Clear;
fs.Seek (DeinePosition,soFromBeginning);
tmpStream.CopyFrom(fs,SegmentLaenge);

Post (URL,tmpStream);
benutzen.

(alles aus dem Kopf und ungetestet)

Björn Ole 16. Jul 2008 01:01

Re: Bestimmte Teile einer Datei in Stream laden
 
Danke, hat mir sehr weitergeholfen!
Besser später als nie. :nerd:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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