Hat irgendjemand eine Idee warum in meinem Programm gerade beim 16. Eintrag eine falsche Größe ausgelesen wird (belegt dann ca 1 GB Speicher!)? Soweit ich es beobachten konnte werden die Daten richtig verschlüsselt und auch gespeichert, aber beim auslesen tritt immer an der selben Stelle der Fehler auf (an dieser Stelle ist der Wert "67" gespeichert).
Speichern einer StringListe als TFileStream:
Delphi-Quellcode:
if FileExists(datM) then
E_Stream := TFileStream.Create(datM, fmOpenWrite or fmShareDenyNone)
else E_Stream := TFileStream.Create(datM, fmCreate);
for i := 0 to 22 do
begin
txt := XORString(Schluessel[S_Nr(i)],bodytxt[i]); // verschlüsseln von StringList-Einträgen
Count := Length(txt);
E_Stream.WriteBuffer(Count, SizeOf(Integer));
if Count > 0 then
E_Stream.WriteBuffer(txt[1], Count);
end;
Auslesen eines TFileStreams in eine StringListe:
Delphi-Quellcode:
List := TStringList.Create;
FStream := TFileStream.Create(datM, fmOpenRead);
for i := 0 to 22 do
begin
FStream.ReadBuffer(Count, SizeOf(Count));
SetLength(txt, Count); // beim 16 Durchlauf, also i = 15 hat Count einen Wert von über 1 Mio.
// und in txt steht ein anderer Wert als eigentlich gepspeichert inkl sehr sehr vielen Nullen
// die vorherigen Einträge werden alle korrekt ausgelesen
if Count > 0 then
if Count < 1000 then
FStream.ReadBuffer(txt[1], Count)
else ShowMessage('Daten sind fehlerhaft!'); // hab ich jetzt erstmal als Sicherung eingebaut
// damit er mir nicht mehr den Speicher vollmüllt
List.Add(XORString(Schluessel[S_Nr(i)],txt)); // enschlüsseln der ausgelesenen Daten
end;