Es wird zwar hier nicht nach einem String sondern nach Hexwerten gesucht, ist aber das gleiche (eine Methode von himitsu):
Delphi-Quellcode:
Const Groesse = 3072000; // 3000 KB ~ 3 MB = 3000 * 1024 = 3072000 Byte
Var FS: TFileStream;
Buffer: Array[0..Groesse-1] of Byte;
I: Integer;
B: Byte;
Begin
Try
{Datei öffnen}
FS := TFileStream.Create('C:\Test.exe', fmOpenReadWrite);
{Daten einlesen}
FS.Read(Buffer, Groesse);
{Bytefolge suchen}
For I := 0 to Groesse - 3 do
If (Buffer[I] = $78) and
(Buffer[I + 1] = $78) and
(Buffer[I + 2] = $78) Then Begin
Showmessage('Gefunden')
End;
FS.Free;
Except
On EFOpenError do ShowMessage('Datei konnte nicht geöffnet werden');
Else ShowMessage('Unbekannter Fehler');
End;
End;
Wenn ich das jetzt mache kommt ein Stack-Überlauf, da wahrscheinlich die Größe für den Buffer wahrscheinlich zu groß ist. Aber man muss doch über Buffer suchen oder etwa nicht
Gibt's da noch eine andere Möglichkeit?