Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 340

/ вопрос открыт /

Здравствуйте!
Использую нетипизированные файлы и встала проблема.
В коде (см приложение) использую динамический массив, в который хочу прочитать файл. Ошибок не вылетает но после последней строчки выполнение кода приостанавливается.
Короче, в динамический массив читать не хочет (со статическим всё нормально!). Как это обойти? Читать как типизированный file of byte по одному байту с помощью цикла?

Приложение:
  1. var
  2. himf:file;
  3. Buf1:array of byte;
  4.  
  5. begin
  6.  
  7. setlength(buf1,15);
  8.  
  9. assignfile(himf,'1.dll');
  10.  
  11. reset(himf,1);
  12.  
  13. blockread(himf,buf1,10);
  14.  
  15. end;


Gooddy Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Gooddy (статус: 3-ий класс)
Вопрос отправлен: 29 октября 2009, 21:55
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Паровоз

Здравствуйте, Failure!
Замените
blockread(himf,buf1,10);
на
blockread(himf,buf1[0],10);

Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 30 октября 2009, 00:11
Оценка за ответ: 5

Комментарий к оценке: Спасибо, но уже начал использовать tmemorystream

Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 30 октября 2009, 17:12; участников в обсуждении: 3.
Gooddy

Gooddy (статус: 3-ий класс), 29 октября 2009, 22:03 [#1]:

Как вариант кстати, создать боооольшой статический массив, и использовать последий параметр функции BlockRead.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 29 октября 2009, 22:09 [#2]:

зы. файл надо прочитать полностью. Код просто для проверки что не работает.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 30 октября 2009, 08:21 [#3]:

Очень давно я тоже использовал динамические массивы для чтения/записи файлов по-турбопаскалевски, как у тебя тут. Но в один прекрасный момент я таки познакомился с TFileStream и с той поры только им и пользуюсь. Чего и тебе желаю.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Gooddy

Gooddy (статус: 3-ий класс), 30 октября 2009, 15:20 [#4]:

Да, мне тоже посоветовали использовать стримы в ирц канале. Я и раньше использовал их, но не думал что они подойдут в данном случае.
Чисти код! Чисти код! Чисти код!
min@y™

min@y™ (статус: Доктор наук), 30 октября 2009, 15:32 [#5]:

Цитата (Gooddy):

Я и раньше использовал их, но не думал что они подойдут в данном случае.


Они подойдут в любом случае.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Паровоз

Паровоз (статус: 10-ый класс), 30 октября 2009, 17:12 [#6]:

"уже начал использовать tmemorystream"

Это ничего не меняет. Если вместо FileStream.Read(buf1[0],10) Вы напишите FileStream.Read(buf1,10), то будет та же самая ошибка. Дело в том, что идет обращение к разным участкам памяти: buf1[0], buf1[1], ... - это сам массив, а просто buf1 - это указатель на массив, т.е. "ячейка" памяти, в которую помещается адрес buf1[0].

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.