
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Сообщ.
#1
,
|
|
|
Надо прочитать bin файл с действительными числами. Пишу:
procedure TForm1.Button1Click(Sender: TObject); var f: file; c: real; begin Assignfile(f,'file.bin'); reset(f); while not eof(f) do begin blockread(f,c,sizeof(c)); end; CloseFile(f); end; выдается: project1.exe raised exception class EinOutError with message 'read beyond end of file'. Process stopped. Что не так? |
Сообщ.
#2
,
|
|
|
reset(f,1);
Добавлено PS: Если не указывать RecSize, то по умолчанию берется 128 байт и при каждом blockread будет читаться не sizeof©, а sizeof©*128 байт |
Сообщ.
#3
,
|
|
|
о, вроде заработала))
я думал сначала писать reset(f,4) но тоже ошибка была. почему 1? |
Сообщ.
#4
,
|
|
|
Цитата Umnik1 @ почему 1? Вроде уже объяснил - в blockread\write в общем случае передается не размер в байтах, а Count - число "единиц"="записей" размером RecSize. При RecSize=1 мы работаем с байтами и размер задаем в байтах. Для чтения последовательности real можно также использовать reset(f,sizeof(real)) + blockread(f,c,1), т.е. читать по одной записи размером sizeof(real) |
Сообщ.
#5
,
|
|
|
Еще есть такой вариант:
![]() ![]() procedure TForm1.Button1Click(Sender: TObject); var f: file of real; c: real; begin Assignfile(f,'file.bin'); reset(f); try // finally while not eof(f) do begin read(f,c); // (!) очень близко к смыслу :) end; // while finally CloseFile(f); end; // finally end; |