Ist die Datei auch 2048 Byte groß?
Und es wäre nicht schlecht, wenn man "mem" etwas Speicher gibt (SetLength), bevor man da versucht war reinzuspeichern (read).
(Wobei ich hier des Zugriffsverletzung schon beim read erwartet hätte.)
Wegen D2009/D2007 ... da die Datei so oder so
Ansi ist, sollte man den Code dennoch auf AnsiString auslegen.
Denn sonst gibt es mal Probleme, wenn sich doch irgendwann mal überlegt dieses auf D2009+ zu portieren.