Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BlockRead и AV


Vovan #2 ©   (2007-01-17 16:29:00) 

Что я делаю не так? Размер файла 100 Кб.


var f: file;
   i: Integer;
begin
  OpenDialog1.Execute;
  AssignFile(f, OpenDialog1.Filename);
  Reset(f);
  BlockRead(f, i, SizeOf(Integer));
  CloseFile(f);


---> AV


palva   (2007-01-17 16:42:00) [1]

Параметр у Reset это длина блока в байтах. По умолчанию длина блока какая-то довольно большая. При чтении мы должны указать длину в БЛОКАХ. Поэтому если длины файла хватило, то может прочитаться, если длину блока забыли указать. Единственно, что прочтется гораздо больше чем запрошено, и могут затереться какие-то другие области.


Германн   (2007-01-17 16:38:00) [2]


> А почему когда я до этого делал
>
> BlockRead(f, SomeHeader, SizeOf(TSomeHeader));
>
> то читало нормально?
>

Это тебе только так казалось.


Плохиш   (2007-01-17 16:37:00) [3]


> А почему когда я до этого делал
>
> BlockRead(f, SomeHeader, SizeOf(TSomeHeader));
>
> то читало нормально?

Повезло...


Vovan #2   (2007-01-17 16:36:00) [4]

М-м, похоже. Спасибо!

А почему когда я до этого делал

BlockRead(f, SomeHeader, SizeOf(TSomeHeader));

то читало нормально?


Германн   (2007-01-17 16:31:00) [5]

Reset(f,1);


Наверх

Титульная страница Поиск, карта сайта Написать письмо