Hab wohl wieder den Tag mit Brett.
Ein gleichlauten Eintrag hab ich im Forum gefunden - aber ich komm nicht weiter.
Folgende CodeStrecke funzt
Code: Alles auswählen
size, len : longint;
**** SPEICHERN ***
for i := 0 to Length(Daten) - 1 do begin
Stream.Write(Daten[i].ID, SizeOf(Daten[i].ID)); // ID Speichern als Integer
Len := Length(Daten[i].Name);
Stream.Write(Len, SizeOf(Len)); // Länge des Stringes speichern
Stream.Write(Pointer(Daten[i].Name)^, Len); // Den String selbst speichern
end;
**** LADEN ****
...
for i := 0 to Len - 1 do begin
Stream.Read(Daten[i].ID, SizeOf(Daten[i].ID)); //-- brauch ich nicht
Stream.Read(size, SizeOf(size));
SetLength(Daten[i].Name, size); //Teil eines Records - Ansistring
Stream.Read(Pointer(Daten[i].Name)^, size);
end;
//Anmerkung size=4Byte= x'80000000'
Code: Alles auswählen
AString : AnsiString;
size, len : longint;
****SPEICHERN ****
Len := Length(AString);
Stream.Write(Len, SizeOf(Len)); // Länge des Stringes speichern
Stream.Write(Pointer(AString)^, Len); // Den String selbst speichern
****LADEN ****
...
//pos := 0;
//Stream.Seek(pos,soBeginning); --für später
...
Stream.Read(size, SizeOf(size));
SetLength(AString, size);
Stream.Read(Pointer(AString)^, size);
//Anmerkung auch hier size=4Byte= x'80000000'
Erstere Lösung geht, zweite nicht.
Als size lese ich immer den Wert 4 (bei der der ersten Variante 128 was mommentan OK wäre)
Jemand eine Idee?
Danke