Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Binärdatei schreiben und lesen? (https://www.delphipraxis.net/178579-binaerdatei-schreiben-und-lesen.html)

milos 15. Jan 2014 21:13

Binärdatei schreiben und lesen?
 
Hallo,

ich bin mir nicht sicher ob das jetz möglich ist, frage aber trotzdem mal nach ^^

Kann ich eine Datei nur mit Bitwerten abspeichern? Also ich mein jetzt um die Datei so klein wie möglich zu halten z.B. für ein Bildformat.

MfG

Aphton 15. Jan 2014 21:17

AW: Binärdatei schreiben und lesen?
 
Ja mit der einzigen Bedingung, dass die Bitanzahl kongruent 0 modulo 8 sein muss, denn die kleinste darstellbare Einheit ist ein Byte!

milos 15. Jan 2014 21:41

AW: Binärdatei schreiben und lesen?
 
Also heisst es ich speichere in Bytes?

Das erste Byte "01001011", das zweite "10010011", und so weiter?

Wie kann ich so etwas realisieren?

MfG

Aphton 15. Jan 2014 21:46

AW: Binärdatei schreiben und lesen?
 
Jup.

Indem du alle deine Bits in Bytes groupierst und diese dann wie gewohnt, in (d)eine Datei mit üblichen Methoden (recherchiere selbst; über die sufu lässt sich einiges finden) schreibst.

Das gruppieren ginge z.B. so:
Delphi-Quellcode:
type
  T8Bits = Array[0..7] of Boolean;

function bitsToByte(const Bits: T8Bits): Byte;
var
  i, j: Integer;
begin
  Result := 0;
  j := 1;
  for i := 0 to 7 do
  begin
    if Bits[i] then
      Result := Result or 1;
    j := j shl 1;
  end;
end;

Sir Rufo 15. Jan 2014 21:54

AW: Binärdatei schreiben und lesen?
 
BTW: Jede Datei besteht aus einer einfachen Folge von Bytes.
In keiner Datei wird z.B. Zeichen, Bilder gespeichert, sondern Bytes, die dann als Zeichen oder Bilder interpretiert werden. Diese Interpretationsvorschrift nennt man dann das Format der Datei ;)

Neutral General 15. Jan 2014 22:04

AW: Binärdatei schreiben und lesen?
 
Aphton du verwirrst ihn doch nur -.-

Ich denke er will einfach nur per TFilestream o.ä. Daten binär (statt in Textform) speichern.

milos 16. Jan 2014 00:46

AW: Binärdatei schreiben und lesen?
 
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

Popov 16. Jan 2014 01:09

AW: Binärdatei schreiben und lesen?
 
Vielleicht solltest du genauer schreiben was du willst, denn "ich will Bytes schreiben" ist etwas zu allgemein, denn selbst wenn du den Text "Hallo Welt!" in ein TMemo schreibst und es abspeicherst, schreibst du Bytes. Bytes schreiben ist also nichts ungewöhnliches.

Vielleicht suchst du aber auch nur das:

Delphi-Quellcode:
// Läd eine Datei und übergibt ihn als String
// sInFile = Name der Datei die geladen werden soll
// sFileString = VAR String - Datei als 8Bit String

function LoadStringFromFile(sInFile: String; var sFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  if not FileExists(sInFile) then Exit;
  FileStream := TFileStream.Create(sInFile, fmOpenRead);
  try
    if FileStream.Size <> 0 then begin
      SetLength(sFileString, FileStream.Size);
      FileStream.Read(sFileString[1], FileStream.Size);
      Result := True;
    end;
  finally FileStream.Free end;
end;

// Speichert den 8 Bit String als Datei
// sOutFile = Name der Datei unter dem gespeichert werden soll
// sFileString = 8 Bit String

function SaveStringToFile(sOutFile: String; sFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  FileStream := TFileStream.Create(sOutFile, fmCreate);
  try
    if Length(sFileString) <> 0 then begin
      FileStream.Write(sFileString[1], Length(sFileString));
      Result := True;
    end;
  finally FileStream.Free end;
end;
Das ist ein Code aus einem Programm von 2002, ich weiß also nicht ob es heute noch funktioniert.

Wie speicherst du dein Byte? Ganz einfach - erstelle ein AnsiString (AnsiStrings = 8 Bit; String = je nach dem). Das ist dann eine Kette von 8 Bit Bytes, auch wenn es sich String nennt.

Delphi-Quellcode:
var
  s: AnsiString;
begin
  s := s + #32 + #127 + #255;
  //oder
  s := s + Chr(32) + Chr(127) + Chr(255);

jfheins 16. Jan 2014 01:39

AW: Binärdatei schreiben und lesen?
 
Das erinnert mich ein wenig daran und daran :-)

milos 16. Jan 2014 03:13

AW: Binärdatei schreiben und lesen?
 
Ist mir irgendwie zu kompliziert xD Ich glaube ich benutze vorerst Textbasierte Dateien und probiere es später in Bytes zu lösen xD

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.
Seite 1 von 2  1 2      

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