Вы пытаетесь читать прямо на T
, который является типом . Вам необходимо предоставить переменную того типа, в которую нужно читать.
type
TReaderHelper = class
class procedure ReadToStruct<T: record>(stream: TStream; offset: Int64; out Data: T);
end;
class procedure TReaderHelper.ReadToStruct<T>(stream: TStream; offset: Int64; out Data: T);
begin
stream.Position := offset;
stream.ReadBuffer(Data, sizeof(T));
end;
Вместо того, чтобы предоставлять конкретный класс потока, такой как TFileStream
, он более гибок, чтобы предоставить общий класс потока. Это позволяет использовать этот метод с различными реализациями потока.
Исключение поиска, которое вы вызвали, не имеет смысла, потому что можно искать за концом файла. Любые ошибки возникают в последующих действиях чтения или записи.
Другое исключение подходит, но, возможно, проще использовать ReadBuffer
и позволить классу потока вызвать исключение в случае, если запрошенный объем данных не может быть прочитан.