![]() |
Probleme mit TStrings
hallo. Ich möchte eine TStrings-Element(von einen Memofeld) per Stream zusammen mit anderen Dateien abspeichern.
Soweit ist auch alles in ordnung. Das Auslesen funktioniert einbandfrei, wenn man vorher abspeichert!!! Wenn ich jedoch gleich bei Programmstart auslesen will, erhalte ich eine Zugriffsverletzung.
Delphi-Quellcode:
type
TRecordBuecher = record ID : Integer; Abkuerzung : String; Titel : Ansistring; Langbeschreibung : TStrings; end; ... procedure TBuecher.Schreiben(ID: Integer; Abkuerzung : String; Titel: Ansistring; Langbeschreibung : TStrings); var Stream: TStream; I,I1: integer; V : Integer; Len, Len2, Len3: Longint; Dateiversion : Integer; begin Dateiversion := 1; SetLength(Buecher, length(Nachteil) + 1); Buecher[High(Buecher)].ID := ID; Buecher[High(Buecher)].Abkuerzung := Abkuerzung; Buecher[High(Buecher)].Titel := Titel; Buecher[High(Buecher)].Langbeschreibung := Langbeschreibung; Stream := TFileStream.Create('Buecher.tdt', fmCreate); try Stream.Write(Dateiversion, SizeOf(Dateiversion)); //Dateiversion Len := Length(Buecher); Stream.Write(Len, SizeOf(Len)); for I := 0 to Length(Buecher) - 1 do begin Stream.Write(Buecher[I].ID, SizeOf(Buecher[I].ID)); Len := Length(Buecher[I].Abkuerzung); Stream.Write(Len, SizeOf(Len)); Stream.Write(PChar(Buecher[I].Abkuerzung)^, Len); Len2 := Length(Buecher[I].Titel); Stream.Write(Len2, SizeOf(Len)); Stream.Write(PChar(Buecher[I].Titel)^, Len2); V := Langbeschreibung.Capacity; Stream.Write(V, SizeOf((V))); for I1 := 0 to Langbeschreibung.Capacity do begin Len3 := Length(Buecher[I].Langbeschreibung.Strings[I1]); Stream.Write(Len, SizeOf(Len3)); Stream.Write(PChar(Buecher[I].Langbeschreibung.Strings[I1])^, Len3); end; end; finally Stream.Free; end; end; procedure TBuecher.Lesen; var Stream: TStream; I, I1: integer; Len, Len1, Len2: Longint; Dateiversion : Integer; Test : String; begin if not FileExists('Buecher.tdt') then begin // Application.Terminate; end else begin Stream := TFileStream.Create('Buecher.tdt', fmOpenRead); try Stream.Read(Dateiversion, SizeOf(Dateiversion)); Case Dateiversion of 1: begin Stream.Read(Len, SizeOf(Len)); SetLength(Buecher, Len); for I := 0 to Len - 1 do begin Stream.Read(Buecher[I].ID, SizeOf(Buecher[I].ID)); Stream.Read(Len1, SizeOf(Len1)); SetLength(Buecher[I].Abkuerzung, Len1); Stream.Read(PChar(Buecher[I].Abkuerzung)^, Len1); Stream.Read(Len1, SizeOf(Len1)); SetLength(Buecher[I].Titel, Len1); Stream.Read(PChar(Buecher[I].Titel)^, Len1); Stream.Read(Len1 , SizeOf(Len1)); for I1 := 0 to Len1 do begin Stream.Read(Len2, SizeOf(Len2)); Stream.Read(PChar(Test)^, Len2); Buecher[I].Langbeschreibung.Add(Test); // Bei dieser Zeile kommt die Zugriffsverletzung end; end; end; end; finally Stream.Free; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 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 by Thomas Breitkreuz