Zunächst mal verwende überall die Methode
ReadBuffer()
anstatt
Read()
:
Delphi-Quellcode:
Strom:=TFileStream.Create(Dateiname, fmOpenRead);
Strom.ReadBuffer(FileHeader, SizeOf(FileHeader));
Falls über das Ende des Streams hinausgelesen wird, wird eine
Exception ausgelöst, was ein wichtiger Hinweis ist.
Mann kann auch so arbeiten:
Delphi-Quellcode:
gelesen:=Strom.Read(buffer,sizeof(buffer));
if gelesen<>sizeof(buffer) then showmessage('Weniger Daten als erwartet gelesen');
Und ich traue Deiner Record-Definition nicht.
Aus eigener schlechter Erfahrung ist ein String nicht gleich ein String und ein Word ist nicht gleich ein Word.......
Versuche ungefähr so zu arbeiten:
Delphi-Quellcode:
var
longintbuffer : array [0..3] of byte;
gelesen:=Strom.Read(longintbuffer,sizeof(longintbuffer));
...
plongintbuffer:=@longintbuffer;
..
myrecord.mylongint:=plongintbuffer^;
Sieht zwar sehr wild aus hilft aber bei Typinkompatibilitäten ungemein.
Gruß
K-H