@3_of_8: das mit dem abschließendem #0 in String hab ich nie bezweifelt ... nutze es ja selber für 'ne schnelle String-PChar-Konvertierung, ohne PChar(S) aus.
Aber warum es mit ShowMessage nicht geht ist recht einfach erklärt ... dieses übergibt ja intern zum Darstellen den String an eine WinPAI-Funktion auf, welche ja die Strings als PChar entgegen nimmt.
@xZise: TStringList.LoadFromFile ließt die gesamte Datei ein, nur ruft es danach TStringList.SetTextStr auf, welches alles ab #0 wieder abschneitet/löscht.
Da du ja wegen der (gewollten) #0 eh die Dateien mit 'nem eigenem Programm erstellen muß, wie wäre es dann mit der eingebauten Längenangabe? Dieses würde dann auch das einlesen beschleunigen/vereinfachen, da ja gleich bekannt wäre, wie lang der String wäre.
Also jeweils die Länge (LongInt) und nachfolgend den Stringinhalt speichern.
Sozusagen:
Delphi-Quellcode:
i := Length(S);
Write(@i, SizeOf(i));
Write(PChar(S), i);
Read(@i, SizeOf(i));
SetLength(S, i);
Read(PChar(S), i);
(womit eingelesen/gespeichert wird, is dir überlassen ... also ob Stream, oder was Anderes)