Warum erzeugst Du Dir nicht einfach einen entsprechenden Record und machst den blockread direkt dahin?
Danke für den Tipp!
Dieser ist zwar mehr oder weniger ein Workaround und würde bei riesigen Dateien nichts bringen. Der Tipp hat aber den Denkansatz gegeben. Denn als es mit Array einigermaßen klappte (String war aus welchem Grund auch immer nur 8 Zeichen lang), wollte ich es direkt mit Seek und einem String probieren. Das knallte wieder und es fiel mir wie Schuppen von den Augen:
Wenn ich S als String definiere, hat er eine Länge von 0. Das muss eine Zugriffsverletzung geben, weil move in nicht reservierten Speicher 30 Zeichen schreiben will. Ein
SetLength(Str, 30);
hat das Problem endgültig gelöst. Da muss man aber auch erstmal drauf kommen...
Ich mache es jetzt ohne Umweg und lese ohne Array gleich direkt in den String. Das ist am alleroberelegantesten.
[edit]
Himitsu war schneller.
Mich verblüfft bloß, dass hier im Forum einige Themen mit String und move zu finden sind, mir aber das SteLength(); völlig durch die Lappen gegangen war.
[/edit]
Gruß & Dank, Alex