|
Вопрос # 3 340/ вопрос открыт / |
|
Здравствуйте!
Использую нетипизированные файлы и встала проблема.
В коде (см приложение) использую динамический массив, в который хочу прочитать файл. Ошибок не вылетает но после последней строчки выполнение кода приостанавливается.
Короче, в динамический массив читать не хочет (со статическим всё нормально!). Как это обойти? Читать как типизированный file of byte по одному байту с помощью цикла?
Приложение: Переключить в обычный режим- var
- himf:file;
- Buf1:array of byte;
-
- begin
-
- setlength(buf1,15);
-
- assignfile(himf,'1.dll');
-
- reset(himf,1);
-
- blockread(himf,buf1,10);
-
- end;
 |
Вопрос задал: 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 (статус: 3-ий класс), 29 октября 2009, 22:03 [#1]:
Как вариант кстати, создать боооольшой статический массив, и использовать последий параметр функции BlockRead.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 29 октября 2009, 22:09 [#2]:
зы. файл надо прочитать полностью. Код просто для проверки что не работает.
Чисти код! Чисти код! Чисти код!
|
|
min@y™ (статус: Доктор наук), 30 октября 2009, 08:21 [#3]:
Очень давно я тоже использовал динамические массивы для чтения/записи файлов по-турбопаскалевски, как у тебя тут. Но в один прекрасный момент я таки познакомился с TFileStream и с той поры только им и пользуюсь. Чего и тебе желаю.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Gooddy (статус: 3-ий класс), 30 октября 2009, 15:20 [#4]:
Да, мне тоже посоветовали использовать стримы в ирц канале. Я и раньше использовал их, но не думал что они подойдут в данном случае.
Чисти код! Чисти код! Чисти код!
|
|
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].
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|