AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Binärdatei mit TFileStream auslesen

Ein Thema von litsa · begonnen am 8. Okt 2010 · letzter Beitrag vom 10. Okt 2010
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

AW: Binärdatei mit TFileStream auslesen

  Alt 10. Okt 2010, 09:21
@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 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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Binärdatei mit TFileStream auslesen

  Alt 10. Okt 2010, 10:29
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 ) );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (10. Okt 2010 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

AW: Binärdatei mit TFileStream auslesen

  Alt 10. Okt 2010, 11:31
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf