![]() |
Dynam. Array Speichern,bzw. Laden
Hallo,
hatte mich schon ein bisschen belesen, was das Laden bzw,Speichern von Dynamischen Arrays angeht. Nur Irgendwie will der Code nich klappen, abgespeichert wird irgendwas(keine Ahnnung was). Und beim Laden ist hinterher nix in der Array; Fehlermeldungen:nicht bekannt; :gruebel: :gruebel: Die Dynamische Array;
Delphi-Quellcode:
So wollte ichs speichern
public
MyListe :Array of Byte;
Delphi-Quellcode:
Und so wollte ich die daten wieder Laden
procedure TForm1.Speichern1Click(Sender: TObject);
var FS : TFileStream; i:Integer; begin with SaveDialog1 do begin Filter := 'Textdateien (*.TXT)|*.TXT'; FileName := 'Firmenbrief.txt'; DefaultExt := 'TXT'; Options := [ofOverwritePrompt]; // Sicherheitsabfrage beim Überschreiben if Execute then begin FS := TFileStream.Create(filename ,fmCreate); try for i := Low(MyListe) to High(MyListe) do fs.write(Myliste[i], Length(Myliste) * SizeOf(Integer)); finally FS.free //for i := 0 to length(MyListe)-1 do //FS.Write (MyListe[i], length(MyListe) * sizeof(MyListe[i])); //finally //FS.free ; end ; end; end; end ;
Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
var itag,y,Spalte,Grenze : Integer; FS : TFileStream; begin with OpenDialog1 do begin Filter := 'Textdateien (*.TXT)|*.TXT'; DefaultExt := 'TXT'; if Execute then begin FS := TFileStream.Create(OpenDialog1.FileName,fmOpenRead); try FS.Read (MyListe[0], length(MyListe) * sizeof(Byte)) ; finally FS.free ; end ; end ; end; |
Re: Dynam. Array Speichern,bzw. Laden
Überdenke diese Zeile:
Delphi-Quellcode:
SizeOf(Byte) sollte reichen
fs.write(Myliste[i], Length(Myliste) * SizeOf(Integer));
Edit: Beim laden hast den gleichen Fehler |
Re: Dynam. Array Speichern,bzw. Laden
Zitat:
Aber trotzdem, wills irgendwie nich laufen? |
Re: Dynam. Array Speichern,bzw. Laden
Überdenke auch mal dies:
Delphi-Quellcode:
Oder wolltest du zum Testen nur das erste Item laden? Dann sollte es eigentlich korrekt sein, poste im Zweifelsfalle nochmal den korrigierten Code.
FS.Read (MyListe[0]
|
Re: Dynam. Array Speichern,bzw. Laden
@ Khabarakh
Ich hab da nichts gefunden wie ichs schreiben könnte, da ich ja beim Laden nicht weis wie gross die Array ist? Es wird ja nicht mal das erste Item zugeordnet |
Re: Dynam. Array Speichern,bzw. Laden
du müsstest dir möglichst noch im Stream die Länge des Arrays speichern, zumindest wenn du mal vor hast die mehr also nur ein Array of Byte zu verwenden.
Wenn es bei dem Array of Byte bleiben soll dann so:
Delphi-Quellcode:
//schreiben
Stream.Write(YourArray[0], Length(YourArray) * SizeOf(Byte)); //lesen SetLength(YourArray, Stream.Size); Stream.Read(YourArray[0], Length(YourArray) * SizeOf(Byte)); |
Re: Dynam. Array Speichern,bzw. Laden
Du musst auf jeden Fall schon vor dem eigentlichen Laden per "FS.Read" wissen, wie groß das Array ist, da du es mittels "SetLength" einrichten musst!
Speichern:
Delphi-Quellcode:
Laden:
len:=Length(MyListe);
FS.WriteBuffer(len, SizeOf(len)); for i:=0 to len-1 do FS.WriteBuffer(MyListe[i], SizeOf(Byte));
Delphi-Quellcode:
!!!ungetestet!!!
FS.ReadBuffer(len, SizeOf(len));
SetLength(MyListe, len); for i:=0 to len-1 do FS.ReadBuffer(MyListe[i], SizeOf(Byte)); |
Re: Dynam. Array Speichern,bzw. Laden
Oder probier das mal, ebenfalls ungetestet:
Delphi-Quellcode:
SetLength(MyListe,0);
while not eof(fs) do begin SetLength(MyListe,Length(MyListe)+1); fs.read(MyListe[Pred(Length(MyListe))],SizeOf(Byte)); end; |
Re: Dynam. Array Speichern,bzw. Laden
@ SirThornberry
Leider scheitere ich hier schon beim speicher. Fehlermeldung:Zugriffsverletzung......... Stream.Write(MyListe[0], Length(MyListe) * SizeOf(Byte)); |
Re: Dynam. Array Speichern,bzw. Laden
Liste der Anhänge anzeigen (Anzahl: 1)
So bevor ich weitermache, stelle ich hier mal einen Beispielcode herein
In der Unit1 zum Schluss sind die beiden Proceduren, die mir Kopfschmerzen machen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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