![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
BrockRead ??
Vadim X © (2004-07-02 12:55:00)Почему Blockread читает данные из файла не те, что я
вижу в HEX редакторе
1 блок нормально а второй на какое-то смещение дальше,
а должен читать подряд.
SR : TSearchRec;
iCount,
iMCount : Integer;
FIN,FOUT : File;
BigBuff : array of char;
TempBuf : array[0..9]of char;
///////////////////////////////////////
AssignFile(FIN,CurrFile);
Reset(FIN,1);
SetLength(BigBuff,SR.Size+1);
iBigOut := 0;
repeat
BufCount := 0;
if not Eof(FIN) then
BlockRead(FIN,TempBuf,Length(TempBuf)-1,BufCount);
for iMCount := 0 to BufCount-1 do
BigBuff[iBigOut + iMCount]:=TempBuf[iMCount];
iBigOut := iBigOut + BufCount;
until iBigOut > SR.Size;
Anatoly Podgoretsky (2004-07-03 11:57:00) [1]А можно и до 9, но при желании и до 4
Fay (2004-07-03 04:41:00) [2]2Vadim X (02.07.04 14:38) [2]
array [0..9] of Char можно рассматривать как строку длиной до 8...
KilkennyCat (2004-07-03 02:18:00) [3]
>
> PVOzerski © (02.07.04 15:01) [6]
забавно, но в борландском примере массив тоже с единицы в данном случае.
GuAV (2004-07-03 02:09:00) [4]GEN++ © (02.07.04 19:41) [8]
Имхо тоже не поможет, но так действительно правильнее...
GEN++ (2004-07-02 19:41:00) [5]Попробуй вместо
TempBuf : array[0..9]of char;
объявмить
TempBuf : array[0..9]of Byte;
Тимохов (2004-07-02 15:24:00) [6]
> , не влияет на проблему, изложенную в [1].
а я спорю? :)) Я вроде это и написал.
я думаю ошибка не в приведенном куске кода.
PVOzerski (2004-07-02 15:01:00) [7]Но согласись, на данном этапе возможность того, что Borland в будущем это может переделать, не влияет на проблему, изложенную в [1]. А вообще, мне сдается, что где-то есть обращение к элементу с индексом [10]. При том, что буфер наверняка выравнен до 12 байт, это может не приводить к исключению, а вот читаться невесть что будет. Я бы плюнул на Си-образность объявил массив [1..10], чтобы не путаться, на то уж пошло.
Тимохов (2004-07-02 14:55:00) [8]
> PVOzerski © (02.07.04 14:51) [4]
Это текущая реализация.
Этот вопрос недавно обсуждался.
Документированного (т.е. в мануале) подтверждения этому не найдено было.
Что будет в будущем - никто не знает.
PVOzerski (2004-07-02 14:51:00) [9]2Тимохов © (02.07.04 14:48) [3]
Ну, array - это не record, у Borland он и так всегда packed.
Тимохов (2004-07-02 14:48:00) [10]1. вместо Length(TempBuf)-1 напишите sizeof(TempBuf)
2. вместо TempBuf : array[0..9]of char; напишите TempBuf : packed array[0..9]of char;
в данном конкретном примере вряд ли вам это пможет. но так правильнее.
Vadim X (2004-07-02 14:38:00) [11]потому что у меня почемуто
по length(tempbuf)
портится последний байт....
короче непонятно в чем дело.
Тимохов (2004-07-02 13:00:00) [12]почему вы читаете по length(tempbuf) - 1 байт, не по length(tempbuf) байт?