Hallo.
Funktioniert leider nicht.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
x: TFileStream;
s: string;
begin
x := TFileStream.Create('test.xyz', fmOpenReadWrite or fmShareDenyWrite);
try
x.Position := 0;
setlength(s, x.Size-1);
x.Read(s[1], x.Size-1);
s := StringReplace(s, #$0E, #$7D, [rfReplaceAll]);
x.Position := 0;
x.Write(s[1], length(s))
finally
x.free;
end;
close;
end;
Es funktioniert, wenn ich eine Zeichenkette vom Anfang suche und ersetze. Wenn ich jedoch etwas suchen und ersetzen will, was vom Dateianfang durch ein Null-Byte (#00h) getrennt ist, passiert nichts.
12 34 56
0E 78 00 12 00 ... -> 12 34 56
7D 78 00 12 00 (OK)
12 34 56 88 78
00 0E 00 ... -> 12 34 56 88 78
00 0E 00 (Fehler)
Scheinbar arbeitet StringReplace() intern mit PChar's, was dazu führen könnte, dass #00h's als Schlussbegrenzung angesehen werden. Dadurch ist StringReplace() scheinbar nicht Binary-Safe, obwohl Strings von Grund auf Binary-Safe sind. Oder hab ich was falsch gemacht?
Gruß
blackdrake