Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > BlockRead


Автор: Ak47black 27.10.2007, 22:01
Здравствуйте.
Сталкнулся с проблемой, попытался сделать элементарное сшитывание одно байта.
Получился вот такой код
Код

var
  f: file;
  Int: byte;
begin
  AssignFile(f, 'I:\test.rar');
  Reset(f);
  BlockRead(f, Int, 1);
  ShowMessage(IntToStr(Int));
  CloseFile(f);
end;

Но после выполнения этого кода я получаю
Цитата

exception class EAccessViolation with message 'Access violation at address 90CF0007. Read of address 90CF0007'.

Хотя считывает вроде нормально.
Помогите понять гдеже всетаки ошибка.  smile 

Автор: VICTAR 27.10.2007, 22:25
Код

var
  f: file;
  Int: byte;
  FRead: integer;
begin
  AssignFile(f, 'I:\test.rar');
  Reset(f, 1); //1 - размер записи
  BlockRead(f, Int, 1, FRead); //FRead - необязательный параметр, вернет реальное кол-во прочитанных байт
  ShowMessage(IntToStr(Int));
  CloseFile(f);
end;

Автор: Ak47black 28.10.2007, 11:04
VICTAR, Cпасибо за код.
Всетаки, а зачем 
Код

Reset(f, 1);

1 то нужна? В Pascale такого вроде небыло.

Автор: volvo877 28.10.2007, 11:40
Цитата(Ak47black @  28.10.2007,  10:04 Найти цитируемый пост)
В Pascale такого вроде небыло. 

И в Паскале такое было... Чтобы сделать размер блока данных равным единице... А поскольку данные читаются/пишутся блоками, то чтобы прочесть один байт, надо установить именно единичный размер блока...

По умолчанию (если не указывать второй параметр в Reset), подразумевается Reset(f, 128)
Цитата(D6 Help)

F is a variable of any file type associated with an external file using AssignFile. RecSize is an optional expression, which can be specified only if F is an untyped file. If F is an untyped file, RecSize specifies the record size to be used in data transfers. If RecSize is omitted, a default record size of 128 bytes is assumed.

Автор: Ak47black 28.10.2007, 14:19
volvo877, Теперь понятно +. Я просто всегда пользовался TFileStream, а шас интересно стало.
А например если на C++ писать, то можно чтото такое заюзать или это только используется на паскале и Delphi? (Просто интересно  smile )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)