![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процедура 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]
> что это означает и как с этим бороться?
означает, что вылез за конец файла. Либо неправильно спозиционировался, либо файл меньше, чем нужно