Nee nee, die Liebe Dolly macht sowas doch nicht.
Fremde Dateien hacken ist aber böse.
(vor allem wenn es gegen die Lizenzbedingen verstoßen könnte)
Sowas wie TEncoding.
ANSI.xyz ist sowieso das Schlimmste, was man einer
Binärdatei antun kann.
Wenn schon mit
Unicode rumgepfuscht wird, dann besser ohne Zeichenübersetzungen.
Delphi-Quellcode:
E := TMBCSEncoding.Create($FFFF, 0, 0); // $FFFF ist auch die CodePage, welche der RawByteString benutzt
E.GetString();
Ansonsten gibt es viele Wege, um Binärdaten auch binär zu behandeln.
Delphi-Quellcode:
var R: RawByteString;
M := TFileStream.Create('
.\file.exe');
SetLength(R, M.Size);
M.ReadBuffer(R[1], M.Size);
...
Und dann besser niemals mit
Unicode-Funktionen darauf zugreigen
Pos und Copy gibt es standardmäßig überladen, auch als "
ANSI"-Version (für AnsiString und seine Verwandten ala RawByteString)
und ansonsten gibt es auch noch die
Unit AnsiStrings.
--
M := TMemoryStream.Create;
M.LoadFromFile('
.\file.exe'));
...
M.Memory
// ein Pointer auf den Dateiinhalt
...
M.SaveToFile('
.\newfile.exe'));
M.Free;
--
B := TFile.ReadAllBytes('
file');
...
// B = ein Byte-Array
TFile.WriteAllBytes('
newfile', B);
--
R := TFile.OpenText('
file');
// bzw. direkt TStreamReader.Create
W := TFile.CreateText('
file');
// bzw. TStreamWriter.Create
// geht nicht, weil hier der Encoding-Parameter fehlt,
// aber
E := TMBCSEncoding.Create($FFFF, 0, 0);
S := TFile.ReadAllText('
file', E);
...
E.Free;
uvm.
Leider gibt es Pos/PosEx unverständlicher Weise nicht für normale Arrays.
Es gibt StrPos-Funktionen für PAnsiChar, die man auf Pointer/Arrays loslassen könnte, aber bei der ersten #0 brechen die ab.
Also bleibt nur selber was basteln.
Aber so oder so ist es immer besser Binärdaten niemals in Text-Strings zu speichern
und stattdessen "ordentlich" mit Streams oder Pointer bzw. ByteArrays zu arbeiten.