Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BlockRead 
V
    Опции темы
Ak47black
  Дата 27.10.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



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

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 
PM MAIL   Вверх
VICTAR
Дата 27.10.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Код

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;

PM MAIL   Вверх
Ak47black
Дата 28.10.2007, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



VICTAR, Cпасибо за код.
Всетаки, а зачем 
Код

Reset(f, 1);

1 то нужна? В Pascale такого вроде небыло.
PM MAIL   Вверх
volvo877
Дата 28.10.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 9
Всего: 116



Цитата(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.

PM MAIL   Вверх
Ak47black
Дата 28.10.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



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

Это сообщение отредактировал(а) Ak47black - 28.10.2007, 14:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.