с тем, что стандартный TFilestream не работает с большим файлом > 2 ГБайт (после вызова функции seek не изменяется position). Какой выход есть в этой ситуации?
Выход - либо через WinAPI. Либо да, вроде начиная с D7 есть позиционирование Int64
Если 32 битное приложение, то кажется и не будет столько в память загружать, насколько помню одному 32 битному приложению максимум выделяется 2GB оперативки
Это не распространяется на чтение файла
Когда я в редакторе набираю fs.Seek, то тип переменной смешения не int64, а просто int, отсюда и ограничение.
пора слезать со среды 25 летней давности.
Читать то по разному можно, программа читает куда то в какой то буффер, и как я помню поток считывает в память весь блок которому указан размер
Ну таки и поделился подробностями, какая версия делфы и что там код делает
Из исходников Delphi 7 (Classes.pas): TStream = class(TObject) private function GetPosition: Int64; procedure SetPosition(const Pos: Int64); procedure SetSize64(const NewSize: Int64); protected function GetSize: Int64; virtual; procedure SetSize(NewSize: Longint); overload; virtual; procedure SetSize(const NewSize: Int64); overload; virtual; public function Seek(Offset: Longint; Origin: Word): Longint; overload; virtual; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; virtual; property Position: Int64 read GetPosition write SetPosition; property Size: Int64 read GetSize write SetSize64; end; То есть Delphi 7 уже поддерживает 64-битное позиционирование в файле. Надо вызывать конкретную версию функции Seek. Ну или Position использовать, он всегда 64-битный.
Обсуждают сегодня