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

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

Процедура Read читает только 8 байт... [D5, WinXP]


ПЛОВ ©   (2004-11-16 11:10:00) 

Больше не хочет, а нужно аж 16 :)))


type
fName: array[0..15] of Char;
...

var
 FFILE: file of BYTE;
...

Seek(FFILE, (T*24)+16);
for C:=0 to 15 do Read(FFILE, BYTE(fName[C]));
// именно тут при попытке прочитать 16 байт вылетает ошибка "Read beyong end of file".

Помогите, пожалуйста, разобраться что это означает и как с этим бороться?


ПЛОВ   (2004-11-16 16:02:00) [1]


> в edit1.text упадет -1, потому как елементов массива нет,
> то есть он пустой.

Он не пустой, у меня там 2 элемента...


> ЗЫЖ хотя понять твою последнюю ..... фразу было трудно.


> задолбался, пойду в КС пошпилю :)))))

Эту чтоли? :))))


Kergma   (2004-11-16 15:25:00) [2]

For this type High returns

Array type The highest value within the range of the index type of the array. For empty arrays, High returns –1.

(С) Delphi Help

a:array of PIBDF_TYPE_ITEM;
...
edit1.Text := inttostr(high(a));

в edit1.text упадет -1, потому как елементов массива нет, то есть он пустой.
ЗЫЖ хотя понять твою последнюю ..... фразу было трудно.


ПЛОВ   (2004-11-16 14:59:00) [3]


> Seek(FFILE, (T*24)+15); ?

Не, "+16" с 0 ведь счет... Это пройденный этап :)))

Извиняюсь за вроде бы оффтопик, но... High ведь возвращает максимальный индекс массива, так? Есть массив из 4-х байт - возвр. значение - 3, есть массив из некоторого количества индексов сложного типа:

 PIBDF_TYPE_ITEM = record
   IBDResName: array[0..15] of Char;
   IBDResPos: DWORD;
   IBDResSize: DWORD;
 end;

- возвращает значение "-1" :) не понимаю, почему??? Может тут у меня баг? ...
задолбался, пойду в КС пошпилю :)))))


Ega23   (2004-11-16 14:38:00) [4]

Seek(FFILE, (T*24)+ 15);?


ПЛОВ   (2004-11-16 14:24:00) [5]


> Kergma  

Так вот я и не понимаю, чего эти байтики не читаються, файл то большой! И вообще, кажеться мне, что дело не в Read'e, а в чем-то другом... Уже локализовал проблемный участок кода, буду искать баг!


Kergma   (2004-11-16 14:03:00) [6]

А чего б тебе не читать весь массив целиком BlockRead'ом?
там кстати и посмотришь скоко прочиталось.
а то неблагодарное это занятие из большого файла по байтику читать....


ПЛОВ   (2004-11-16 13:50:00) [7]


> а если так ?
> var
> FFILE: file of WORD;

А не подходит! Нужно читать по байтам только...

Кстати, другая проблема возникла - теперь число "читабельных" байт равно 255 :))) Eof(FFILE) уже не помогает...


Ditrix   (2004-11-16 13:28:00) [8]

а если так ?
var
FFILE: file of WORD;


Zekson   (2004-11-16 12:01:00) [9]

Отладчик - решение всех подобного рода проблем.


Cosinus   (2004-11-16 11:38:00) [10]

Хм... А последние 8 байт я так понимаю не нужны?


Reindeer Moss Eater   (2004-11-16 11:29:00) [11]

Надо верить сообщениям об ошибках.
Тогда все будет понятно.


ПЛОВ   (2004-11-16 11:28:00) [12]

Ладно, я человек не гордый, работает - и хорошо. Всем спасибо!


ПЛОВ   (2004-11-16 11:26:00) [13]


> A чему равна переменная T?

предположим, нулю...

написал в цикле так:

if not Eof(FFILE) then Read(FFILE, BYTE(FName[C]));

...работает :) Ниче не понимаю :)))


Reindeer Moss Eater   (2004-11-16 11:21:00) [14]

// именно тут при попытке прочитать 16 байт вылетает ошибка "Read beyong end of file".

От тебя кто-то прячет в шкаф твою текущую позицию в файле перед чтением? Или размер файла?


Amoeba   (2004-11-16 11:20:00) [15]

A чему равна переменная T? Может из-за нее позиционирование неправильное. Что отладчик показывает?


ПЛОВ   (2004-11-16 11:18:00) [16]


> clickmaker ©

В том то и дело, что файл большой...


clickmaker   (2004-11-16 11:13:00) [17]


> что это означает и как с этим бороться?

означает, что вылез за конец файла. Либо неправильно спозиционировался, либо файл меньше, чем нужно


Наверх

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