Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei in Stream einlesen - Liest nur 0 Bytes (https://www.delphipraxis.net/108230-datei-stream-einlesen-liest-nur-0-bytes.html)

little_budda 9. Feb 2008 10:38


Datei in Stream einlesen - Liest nur 0 Bytes
 
Hallo,

ich möchte eine Datei in einen Stream einlesen um danach Bytweise die Inhalte zu ändern.
Ich verwende folgenden Code:
Delphi-Quellcode:
...
procedure Tfrm_chainAutoProg.LB_ElementClick(Sender: TObject);
var sFileName : string;
    MyFilestream : tfilestream;
    iRealReadBlocks : longint;
    iFileSize : integer;
begin
  // Datei laden
  sFileName := sSourceFileName;

  MyFilestream := tfilestream.create(sFileName , fmOpenRead or fmShareDenyNone);
  iFileSize := MyFilestream.Size;
  setlength(aFileBlockBuffer, iFileSize);

  iRealReadBlocks := MyFilestream.read(aFileBlockBuffer, iFileSize);
  MyFilestream.free;

  if (iRealReadBlocks <> iFileSize) then
...
Leider gibt mir das "MyFilestream.read" immer 0 zurück.
Ich stehe auf dem Schlauch ...

:gruebel:

Corpsman 9. Feb 2008 10:42

Re: Datei in Stream einlesen - Liest nur 0 Bytes
 
Probier mal

MyFilestream.Position := 0;

vor dem Read

bzw las die MyFilestream.size anzeigen.

little_budda 9. Feb 2008 11:42

Re: Datei in Stream einlesen - Liest nur 0 Bytes
 
Also der Tipp mit MyFilestream.Position := 0;
hat nicht geholfen.
Liest immer noch nur 0 Bytes ein.

Die Size des Streams ist richtig.
Daran mache ich ja die Array-Größe fest.

Apollonius 9. Feb 2008 11:48

Re: Datei in Stream einlesen - Liest nur 0 Bytes
 
Dynamische Arrays sind nur Zeiger, für das Auslesen aus dem Stream musst du daher aFileBlockBuffer[0] angeben.

little_budda 9. Feb 2008 12:07

Re: Datei in Stream einlesen - Liest nur 0 Bytes
 
Super. Klappt.
Danke.

Muetze1 9. Feb 2008 17:09

Re: Datei in Stream einlesen - Liest nur 0 Bytes
 
1. Nach dem anlegen eines TFileStreams (oder auch Memorystreams) ist die Position immer 0

2. Nach der nun ausgehandelten Fehlerquelle, sollte aber iRealReadBlocks trotzdem einen Wert von mehr als 0 enthalten haben. Er hat es zwar sonstwo hingelesen, aber er hat gelesen.


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