AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Binärdatei schreiben und lesen?
Thema durchsuchen
Ansicht
Themen-Optionen

Binärdatei schreiben und lesen?

Ein Thema von milos · begonnen am 15. Jan 2014 · letzter Beitrag vom 16. Jan 2014
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 14:25
Mannomann,
ist jetzt wieder Philosophie angesagt?
Der Binäre Weg ist der Weg ohne Interpretation der einzelnen Werte, also keine Steuerzeichen, kein UTF8,kein Longint, kein irgendwas, nur x00..xFF oder 2..255.

Ich glaube TFilestream ist das richtige, jedoch finde ich nirgends einen Weg wie ich es so lösen kann wie ich es brauche :/

Wie kann ich nun wirklich nur Byts reinschreiben? Sry wenn ich was übersehe aber finde es wirklich nirgends o_O

MfG
Delphi-Quellcode:
mybuffer : byte;
wert : byte;
geschrieben : longint;

mystream:=tfilestream.create(.....);

  mybuffer:=wert[i]
  geschrieben:=mystream.writebuffer(mybuffer,sizeof(mybuffer));
  if geschrieben<>sizeof(mybuffer) then Showmessage('Schreiben der Daten fehlgeschlagen);

mystream.free;
Das sollte als Grundgerüst erst einmal reichen. Vielleicht ist die OH auch noch hilfreich.
Ggf. könntest Du vllt. mit ein paar mehr Details heraus rücken.

Gruß
K-H

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 15:08
Wenn du ausschlieslich ein Array von Bits speichern möchtst dann könntest du meine TBitStream -Klasse benützen.
Z.Zt. fehlt noch das Laden der Bits aber das liese sich nachrüsten falls du Interesse hast.
Man kann die Bits nur seriell schreiben oder lesen; für wahlfreien Zugriff könnte man die Klasse TBits aus der VCL verwenden.
Delphi-Quellcode:
unit BitString;

interface

uses Classes;

type

  // verwaltet einen String der eine Liste von Bits repräsentiert
  TBitString = class(TObject)
    FData : AnsiString;
    FDataIdx : Integer;
    FDataBitpos: Integer;
    function GetCount:Integer;
  public
    function GetDataBit(var bit:Boolean):Boolean;
    procedure PutDataBit(bit:Boolean);
    procedure Reset;
    procedure SaveToStream(stream:TStream);
    procedure SaveToFile(const filename:string);

    property Data : AnsiString read FData write FData;
    property Count:Integer read GetCount;
  end;

implementation

{ TBitString }

function TBitString.GetCount: Integer;
begin
   Result := FDataIdx * 8 + FDataBitpos;
end;

function TBitString.GetDataBit(var bit: Boolean): Boolean;
begin
   bit := (ord(FData[FDataIdx]) and (1 shl FDataBitpos)) <> 0;

   Inc(FDataBitpos);
   if FDataBitpos >= 8 then
   begin
      FDataBitpos := 0;
      Inc(FDataIdx);
      Result := FDataIdx <= Length(FData);
   end
   else
      Result := True;
end;

procedure TBitString.PutDataBit(bit: Boolean);
begin
   if (FDataIdx = 1) and (FData = '') then
      FData := #0;

   if bit then
      FData[FDataIdx] := char(ord(FData[FDataIdx]) or (1 shl FDataBitpos))
   else
      FData[FDataIdx] := char(Ord(FData[FDataIdx]) and not (1 shl FDataBitpos));


   Inc(FDataBitpos);
   if FDataBitpos >= 8 then
   begin
      FDataBitpos := 0;
      Inc(FDataIdx);
      FData := FData + chr(0);
   end
end;

procedure TBitString.Reset;
begin
   FDataIdx := 1;
   FDataBitpos := 0;
   FData := '';
end;

procedure TBitString.SaveToStream(stream: TStream);
begin
   stream.WriteBuffer(Self.Data[1], Length(Data));
end;


procedure TBitString.SaveToFile(const filename: string);
var
  fs : TFileStream;
begin
   fs := TFileStream.Create(filename, fmCreate);
   try
      SaveToStream(fs);
   finally
      fs.Free;
   end;
end;


end.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 10:06 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