Seek geht grundsätzlich nur auf DatensatzNr, bei file ist der "DatenSatz" 1 lang, also müßte seek in Anzahl der byte angegeben werden.
Da Du aber die Position eh nicht kennst, kannst du auch nichts mit seek setzen. Die Position willst Du ja erst ermitteln.
Du kannst es mit BlockRead und Lesen in einen Schiebepuffer realisieren (AnsiString). Ist aber etwas aufwendig aber auch in ein paar Zeilen lösbar. Bei einem Schiebepuffer mußt Du vorallem darauf achten, daß beim neuen Einlesen vom vorherigen puffer die letzten 9 byte/Ansichar (9 hier = Tar Länge) erhalten bleiben und nach vorne in den Puffer gesetzt werden (da ja das tar in dem Rest als Teil vorkommen kann). Und wg. der Dateiposition mitzählen.
Wenn die Datei allerdings < 4GB ist, würde ich die Datei komplett ein einem Block in einen ansistring einlesen.
Dein Such/Vergleichswert (Signatur) ware aber als
Ansi- oder Shortstring (bzw. string[9]) besser deklariert. Dann kannst du das Vorkommen über die String-Behandlungs-Routinen erledigen (pos(tar,Buffer)>0 ?).