Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Binärdatei mit TFileStream auslesen (https://www.delphipraxis.net/155096-binaerdatei-mit-tfilestream-auslesen.html)

SirThornberry 10. Okt 2010 08:21

AW: Binärdatei mit TFileStream auslesen
 
@xzise: folgendes dürfte nicht funktionieren:
Delphi-Quellcode:
procedure ShowBinary(var Data; Count: Cardinal; FileName : string);
var
  s : TStream;
begin
  s := TFileStream.Create(FileName, fmCreate);
  try
    s.Write(@Data, Count);
  finally
    s.Free;
  end;
end;
explizit die Zeile
Delphi-Quellcode:
s.Write(@Data, Count);
Write erwartet eine Referenz und keinen Pointer. Durch ein vorangestelltes @ wird die Adresse auf die Data Variable geschreiben + die Daten die dahinter im Speicher liegen. (falls es überhaupt kompiliert)

Sir Rufo 10. Okt 2010 09:29

AW: Binärdatei mit TFileStream auslesen
 
Wieso definierst du dein Record nicht wie folgt
Delphi-Quellcode:
Type
  TDatensatz = packed record // Größe = 1404 Bytes
    RawUnkn : word; // 2 Byte (diese Daten wertest du nicht aus, also mir unbekannt, was die bedeuten
    RawTime : word; // 2 Byte
    RawData : Array[ 0..349 ] of integer; // 350* 4 Bytes
    Function TimeStr : string;
    Function Data( Index : integer ): double;
  end;

{...}

function TDatensatz.TimeStr : string;
  begin
    Result := Format( '%d:%d', [ RawTime div 100, RawTime mod 100 ] );
  end;

function TDatensat.Data( Index: integer ) : double;
  Begin
    Result := RawData[ Index ] / 100;
  end;

{...}

var
  ds : TDatensatz;

// Prüfen ob die Recordgröße stimmt, denn dann ist die Dateigröße ein ganzes Vielfaches von der Recordgröße
if fs.Size mod SizeOf( ds ) = 0 then

// Auslesen des aktuellen Records aus der Datei
fs.Read( ds, SizeOf( ds ) );

xZise 10. Okt 2010 10:31

AW: Binärdatei mit TFileStream auslesen
 
Moin SirThornberry,
stimmt das ergibt Sinn, ich dachte Write erwartet einen Pointer, aber Gegenvorschlag einfach das @ wegnehmen?

Delphi-Quellcode:
procedure ShowBinary(var Data; Count: Cardinal; FileName : string);
var
  s : TStream;
begin
  s := TFileStream.Create(FileName, fmCreate);
  try
    s.Write(Data, Count);
  finally
    s.Free;
  end;
end;
MfG
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr.
Seite 2 von 2     12   

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