![]() |
Re: Dynam. Array Speichern,bzw. Laden
@Grishnak
Hab hier ebenfalls eine Zugriffsverletzung
Delphi-Quellcode:
if Execute then
begin len:=Length(MyListe); FS.WriteBuffer(len, SizeOf(len)); TRY for i:=0 to len-1 do FS.WriteBuffer(MyListe[i], SizeOf(Byte)); finally |
Re: Dynam. Array Speichern,bzw. Laden
Hallo Thomas,
dein Programm musst du selbst anpassen, aber hier zwei Routinen, die ein dynamisches Byte-Array aus einer Datei laden und in eine Datei speichern. Vielleicht hilft es dir zu verstehen:
Delphi-Quellcode:
Freundliche Grüße vom marabu
uses
Types; procedure ArrayLoad(var bda: TByteDynArray; fn: TFileName); begin with TFileStream.Create(fn, fmOpenRead + fmShareDenyWrite) do begin SetLength(bda, Size); ReadBuffer(bda[0], Length(bda)); Free; end; end; procedure ArraySave(bda: TByteDynArray; fn: TFileName); begin with TFileStream.Create(fn, fmCreate) do begin WriteBuffer(bda[0], Length(bda)); Free; end; end; |
Re: Dynam. Array Speichern,bzw. Laden
@marabu
Perfekt, sogar Read funkt ausgezeichnet |
Re: Dynam. Array Speichern,bzw. Laden
Ich weis zwar, das es fast ein neues Thema ist, aber ich willsr aufgrund meiner Speicher-Laden Problematik hier reinschreiben.
Ga ich die Array auch mah kürzen muss, wollte ich .Free verwenden. Doch irgendwie will TByteDynArray das ni. Wie bekomme ich das hin
Delphi-Quellcode:
MyArray:TByteDynArray;
MyArray[Index].Free; |
Re: Dynam. Array Speichern,bzw. Laden
Das bekommst du genauso hin, wie du es vergrösserst: Mit SetLength(). Damit einfach die neue Grösse setzen. Siehe die Lade-Routine.
|
Re: Dynam. Array Speichern,bzw. Laden
Ich hab den Code genommen, das Free musste ich raus nehmen
Delphi-Quellcode:
Mit Free Fehlermeldung: Record, Objekt oder Klassentyp erforderlich
procedure TForm1.ArrayDelete(MyArray:TByteDynArray;Index: Integer);
var i : Integer; begin //MyArray[Index].Free; for i := Index to length(MyArray) - 2 do MyArray[i] := MyArray[i + 1]; setlength(MyArray, length(MyArray) - 1); end; |
Re: Dynam. Array Speichern,bzw. Laden
Hallo Thomas,
hier ein paar Verbesserungsvorschläge zu deiner Prozedur:
Delphi-Quellcode:
Grüße vom marabu
// uses Types
procedure ArrayDelete(var bda: TByteDynArray; const index: Cardinal; size: Cardinal = 1); var iTail: Integer; begin if (size = 0) or (index >= Length(bda)) then Exit; if size > (Length(bda) - index) then size := Length(bda) - index; iTail := index + size; if (iTail < Length(bda)) then Move(bda[iTail], bda[index], Length(bda) - iTail); SetLength(bda, Length(bda) - size); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 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