![]() |
Datei binär lesen und schreiben
Hi, ich suche eine Funktion um eine Datei / einen Datenstream binär auszulesen und diesen "Binär-String" wieder in eine Atei zu schreiben.
Hatte das schonmal irgendwo gefunden, aber da hatte ich wohl noch bessere Augen ;) Vielen Dank schonmal |
Re: Datei binär lesen und schreiben
Was meinst du mit "binär lesen"?
|
Re: Datei binär lesen und schreiben
Also ich möchte eine Datei als String aus Nullen und Einsen darstellen.
Und eben wieder einen Solchen String als Datei schreiben. |
Re: Datei binär lesen und schreiben
Als (File)Stream byteweise lesen und die Bytes dann in ihre einzelnen Bits zerlegen ... einen direkten Zugriff auf die Bits gibt man dir nicht ohne Mehrarbeit ...
mfG Markus Nachtrag: Ich könnte mir keinen effektiveren Weg vorstellen, den Arbeitsspeicher bis zum Bersten zu Füllen, ohne davon einen Nutzen zu haben ... auf 1 Datenbyte brauchst du 8 Byte für deinen String, da is der RAM ratz-fatz voll ... ich würde immer nur einen Ausschnitt umwandeln (um genau zu sein, ein Byte^^) |
Re: Datei binär lesen und schreiben
Hi also aus einem Stream lese ich mit Read(buffer,int) aber wie lese ich damit den kompletten Stream?
Ich suche also sowas:
Delphi-Quellcode:
For i := 0 to length(FileStream) do
FileStream.Read(mybuffer,i); |
Re: Datei binär lesen und schreiben
Naja, TStringList hat z.B. die Procedure ReadFromStream und kann damit den gesamten Stream in einen String lesen (byteweise).
Ansonsten kannst du den Stream mit Read byteweise in einer Schleife auslesen, das gelesene Byte in dein gewünschtes Format wandeln und z.B. in irgendeinen Puffer schreiben. Zudem: function Read(var Buffer: Type; Count: Integer): Integer; override; Die Funktion Read erwartet auch die Angabe von Count, was der Anzahl der Byte entspricht, die aus dem Stream gelesen wird. Steht genau so in der Hilfe. |
Re: Datei binär lesen und schreiben
Ich würde ähnlich wie mein Vorredner, entweder eine Klasse außenrum packen oder eine von TFile-/TMemoryStream ableiten.
Im übrigen würde ich wie bereits erwähnt, immer nur den Teil lesen, den du brauchst. Leite doch einfach ein TFileStream ab, ändere die Methode Read so, dass du via inherited ein Byte liest und dann einen String mit 8 Stellen zurückgibst ... (Nicht getestet:)
Delphi-Quellcode:
mfG
function read(var Buffer : String, byteCount : Integer) : Integer; //als overload deklarieren
var i, Buf, count : byte; begin result := 0; Buffer := 0; repeat count := read(buf, 1) if count = 1 then begin inc(result); i := 1; while buf <> 0 do begin if odd(buf) then Buffer := Buffer+'1' else Buffer := Buffer+'0'; inc(i); buf:= buf shr 1; end; while i <= 8 do begin Buffer := Buffer+'0'; inc(i); end; end else break; //ausstiegsvariante 1 : wir sind am ende des streams until result = byteCount; //variante 2 : wir haben gelesen was zu lesen ist end; Markus |
Re: Datei binär lesen und schreiben
Zitat:
Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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