![]() |
Datei in array of Byte öffnen und Speichern
hi!
Wie kann ich eine Datei in einem "array of Byte" öffnen und nach dem Bearbeiten wieder Speichern? |
Re: Datei in array of Byte öffnen und Speichern
Ich würde sie mit einem TFileStream in das array einlesen.
ungetestet:
Delphi-Quellcode:
[edit]fs.free vergessen[/edit]
...
var Form1: TForm1; MyDat: array of Byte; ... // einlesen procedure TForm1.btnlesenClick(Sender: TObject); var fs: TFileStream; i: integer; begin fs := TFileStream.Create('C:\test.dat', fmOpenRead); SetLength(MyDat, fs.Size); for i := 0 to fs.Size-1 do fs.Read(MyDat[i], SizeOf(byte)); fs.free; end; // speichern procedure TForm1.btnlesenClick(Sender: TObject); var fs: TFileStream; i: integer; begin fs := TFileStream.Create('C:\test.dat', fmCreate); for i := 0 to High(MyDat) do fs.Write(MyDat[i], SizeOf(byte)); fs.free; end; |
Re: Datei in array of Byte öffnen und Speichern
Danke Funktioniert!!! :hello: :hello: :spin2: :spin2:
|
Re: Datei in array of Byte öffnen und Speichern
Achtung: Es funktioniert aber nur mit kleinen Dateien
Wenn Du eine z.B. 100 MB Datei öffnest wird die komplett in der Arbeitsspeicher geladen. Wenn es darum geht auf die einzelnen Bytes zuzugreifen ist 1. ziemlich langsam und 2. Arbeitsspeicherverschwenderei erster Extraklasse. Das Array wird dann ebenfalls 100 MB groß sein. Wenn Du auf die einzelnen Bytes zugreifen möchtest bis Du mit Seek besser bedient. Verwende lieber folgende Methoden
Delphi-Quellcode:
aIndex entspricht dann dem ArrayIndex.
function ReadByteFromStream(aStream: TStream; aIndex: Int64): Byte;
begin aStream.Seek(aIndex,soFromBeginning); aStream.Read(Result,SizeOf(Byte)); end; procedure WriteByteToStream(aStream: TStream; aIndex: Int64; aByte : Byte); begin aStream.Seek(aIndex,soFromBeginning); aStream.Write(aByte,SizeOf(Byte)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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