Wahrscheinlich wäre es sinnvoller zu fragen, was Sneaky eigentlich genau erreichen möchte?
Zitat:
Ziel ist es: ich möchte einen SubString in der Datei finden und dafür keine extra 3rd Party
Unit verwenden.
Es hat nun funktioniert.
Delphi-Quellcode:
var
aFile, sSubStr: String;
AnsiStr: AnsiString;
ByteArray: TArray<Byte>;
begin
sSubStr := 'DasHierMussGefundenWerden';
aFile := 'C:\Users\<name>\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations\27932e73jddafda77b.customDestinations-ms';
ByteArray := TFile.ReadAllBytes(aFile);
try
if Length(ByteArray) > 0 then
begin
SetString(AnsiStr, PAnsiChar(@ByteArray[0]), Length(ByteArray));
if Pos(sSubStr, AnsiUpperCase(AnsiStr)) - 1 > 0 then
// tue etwas, wenn sSubStr in aFile gefunden wurde
end;
finally
SetLength(ByteArray, 0);
end;
Eins möchte ich betonen: Herr Jaenikes Units ist wirklich super!
Aber da ich aktuell mein Projekt aufräume und ich versuche einen gewissen Standard einzuhalten, versuche ich Units, die ich nur ein-, höchstens zwei- oder dreimal verwende durch andere Möglichkeiten zu ersetzen.
Beispiel. Was vorher so aussah...
Delphi-Quellcode:
var
sCurrLine, sRes: string;
FileReaderEx: TFastFileReader;
begin
sRes := '';
if FileExists(aFile) then
begin
FileReaderEx := TFastFileReader.Create(aFile);
try
while FileReaderEx.Position < FileReaderEx.Size do
begin
FileReaderEx.ReadLn(sCurrLine);
sRes := sRes + sLineBreak + sCurrLine;
end;
finally
FileReaderEx.Free;
end;
end;
{$WARNINGS OFF}
Result := Trim(UTF8toString(sRes));
{$WARNINGS ON}
end;
Sieht nun so aus
Delphi-Quellcode:
begin
if FileExists(aFile) then
Result := TFile.ReadAllText(aFile, TEncoding.UTF8);
Result := Trim(Result);
end;