StrToHex sollte doch eigentlich alle Zeichen behandeln?
ist ja schließlich ein Vorteil der Delphistrings (mit Längenangabe)
Aber an deiner stelle würde ich das ganz anders angehen.
Wandle deine HexStrings am Anfang in Binärfolgen um und suche diese direkt ... so brauchst du nicht die ganze rießige Datei umzuwandeln, sondern nur die kleinen SuchStrings
mal schnell umgebaut:
Delphi-Quellcode:
Function HexcodeInFile(Const FileName: String; Const HexCodeList: Array of String): Boolean;
Const BufferSize = 65536;
Var Data: Array of String;
F: TFileStream;
L: Int64;
Buffer: AnsiString;
i, MaxDataSize: Integer;
Begin
Result := False;
MaxDataSize := 0;
SetLength(Data, Length(HexCodeList));
For i := 0 to High(HexCodeList) do Begin
SetLength(Data[i], Length(HexCodeList[i]) div 2);
HexToBin(PChar(HexCodeList[i]), PChar(Data[i]), Length(Data[i]));
If Length(Data[i]) > MaxDataSize Then MaxDataSize := Length(Data[i]);
End;
F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
Try
L := F.Size;
Buffer := '';
While F.Position + Length(Buffer) < L do Begin
i := Length(Buffer);
SetLength(Buffer, i + BufferSize);
SetLength(Buffer, i + F.Read(Buffer[i + 1], BufferSize));
For i := 0 to High(Data) do
If Pos(Data[i], Buffer) > 0 Then Begin
Result := True;
Break;
End;
Delete(Buffer, 1, Length(Buffer) - MaxDataSize);
End;
Finally
F.Free;
End;
End;