AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit TStrings

Ein Thema von Taladan · begonnen am 25. Mär 2004
Antwort Antwort
Benutzerbild von Taladan
Taladan

Registriert seit: 5. Aug 2003
Ort: Osnabrück
505 Beiträge
 
Delphi 2005 Professional
 
#1

Probleme mit TStrings

  Alt 25. Mär 2004, 00:30
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;
Marco
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz