Lazarus: Datei als Byte Array laden und Byte Array als Datei speichern
Tutorial von Delphianer | Letztes Update am 02.04.2021 | Erstellt am 14.11.2013
In diesem Tutorial möchte ich euch zeigen, wie ihr eine Datei Byte für Byte in einen Array lesen könnt und wie ihr einen Byte Array auch wieder in eine Datei schreiben könnt.
Zunächst definieren wir uns einen Byte Array:
type TByteArr = array of Byte;
Diesen können wir jetzt zum Beispiel so mit einzelnen Bytes füllen:
var BA: TByteArr; begin SetLength(BA, 3); BA[0] := 65; BA[1] := $41; BA[2] := %1000001;
Dabei spielt es keine Rolle, ob wir die Bytes in dezimaler, hexadezimaler oder binärer Schreibweise angeben.
65 ist der ASCII Code für "A". In hexadezimaler Schreibweise entspricht die Zahl 65 der 41 und in binärer Schreibweise der 1000001.
Wir setzen im Beispiel also alle drei Bytes auf den gleichen Wert. Dezimale Angaben können als einfache Integer-Zahlen in den Code geschrieben werden, hexadezimale werden mit $ gekennzeichnet und binäre mit %.
Byte Array speichern
Nun möchten wir uns ansehen, wie wir unseren Byte Array in eine Datei speichern können. Dazu benutzen wir die folgende Funktion:
procedure SaveByteArray(AByteArray: TByteArr; const AFileName: string); var Stream: TStream; begin if FileExistsUTF8(AFileName) then DeleteFileUTF8(AFileName); Stream := TFileStreamUTF8.Create(AFileName, fmCreate); try Stream.WriteBuffer(Pointer(AByteArray)^, Length(AByteArray)); finally Stream.Free; end; end;
Ein Aufruf könnte so aussehen:
var BA: TByteArr; begin SetLength(BA, 1); BA[0] := 65; SaveByteArray(BA, 'datei.dat');
Als ersten Parameter übergeben wir unseren Byte Array, als zweiten den Dateinamen.
Byte Array laden
Um eine Datei von der Festplatte in einen Byte Array zu laden, bietet sich folgende Funktion an:
function LoadByteArray(const AFileName: string): TByteArr; var Stream: TStream; DataLeft: Integer; begin SetLength(result, 0); if not FileExistsUTF8(AFileName) then exit; Stream := TFileStreamUTF8.Create(AFileName, fmOpenRead or fmShareDenyWrite); try stream.Position:=0; DataLeft := Stream.Size; SetLength(result, DataLeft div SizeOf(Byte)); Stream.Read(PByte(result)^, DataLeft); finally Stream.Free; end; end;
Ein Aufruf der Funktion kann so aussehen:
var BA: TByteArr; begin BA := LoadByteArray('datei.dat');
Wir geben als Parameter nur einen Dateinamen an und bekommen den Byte Array zurück.
Byte Array visualisieren
Bei der Arbeit mit Byte Arrays kommt früher oder später die Frage nach dem Inhalt des Byte Arrays auf. Dazu bietet es sich an, die Byte Arrays in hexadezimaler Form als String auszugeben. Damit würde eine Ausgabe des oben genannten Byte Arrays zum Beispiel so aussehen: "41 41 41".
Über den Autor
Der Autor hat keine Kurzbeschreibung seines Profils angegeben.
Profil anzeigen
Ähnliche Themen
Delphi/Lazarus: Byte Array als String aus HEX-Werten anzeigen
Tipp | 0 Kommentare
jQuery: Data Attribut Wert lesen und ändern
Tutorial | 0 Kommentare
JavaScript: Arrays erstellen und nutzen
Info | 0 Kommentare
jQuery: HTML5 Canvas mit Ajax an Server senden
Tutorial | 0 Kommentare
Bild vor dem Upload im Browser verkleinern
Tutorial | 5 Kommentare
HTML5 Canvas: Einsteiger Tutorial Teil 4 - Text auf Canvas schreiben
Tutorial | 0 Kommentare
HTML5 Canvas als Bild an Server senden und speichern
Tutorial | 0 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.