Текущий архив: 2004.07.18;
Скачать: CL | DM;
Вниз
BrockRead ?? Найти похожие ветки
← →
Vadim X (2004-07-02 12:55) [0]Почему 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;
← →
Тимохов © (2004-07-02 13:00) [1]почему вы читаете по length(tempbuf) - 1 байт, не по length(tempbuf) байт?
← →
Vadim X (2004-07-02 14:38) [2]потому что у меня почемуто
по length(tempbuf)
портится последний байт....
короче непонятно в чем дело.
← →
Тимохов © (2004-07-02 14:48) [3]1. вместо Length(TempBuf)-1 напишите sizeof(TempBuf)
2. вместо TempBuf : array[0..9]of char; напишите TempBuf : packed array[0..9]of char;
в данном конкретном примере вряд ли вам это пможет. но так правильнее.
← →
PVOzerski © (2004-07-02 14:51) [4]2Тимохов © (02.07.04 14:48) [3]
Ну, array - это не record, у Borland он и так всегда packed.
← →
Тимохов © (2004-07-02 14:55) [5]
> PVOzerski © (02.07.04 14:51) [4]
Это текущая реализация.
Этот вопрос недавно обсуждался.
Документированного (т.е. в мануале) подтверждения этому не найдено было.
Что будет в будущем - никто не знает.
← →
PVOzerski © (2004-07-02 15:01) [6]Но согласись, на данном этапе возможность того, что Borland в будущем это может переделать, не влияет на проблему, изложенную в [1]. А вообще, мне сдается, что где-то есть обращение к элементу с индексом [10]. При том, что буфер наверняка выравнен до 12 байт, это может не приводить к исключению, а вот читаться невесть что будет. Я бы плюнул на Си-образность объявил массив [1..10], чтобы не путаться, на то уж пошло.
← →
Тимохов © (2004-07-02 15:24) [7]
> , не влияет на проблему, изложенную в [1].
а я спорю? :)) Я вроде это и написал.
я думаю ошибка не в приведенном куске кода.
← →
GEN++ © (2004-07-02 19:41) [8]Попробуй вместо
TempBuf : array[0..9]of char;
объявмить
TempBuf : array[0..9]of Byte;
← →
GuAV © (2004-07-03 02:09) [9]GEN++ © (02.07.04 19:41) [8]
Имхо тоже не поможет, но так действительно правильнее...
← →
KilkennyCat © (2004-07-03 02:18) [10]
>
> PVOzerski © (02.07.04 15:01) [6]
забавно, но в борландском примере массив тоже с единицы в данном случае.
← →
Fay © (2004-07-03 04:41) [11]2Vadim X (02.07.04 14:38) [2]
array [0..9] of Char можно рассматривать как строку длиной до 8...
← →
Anatoly Podgoretsky © (2004-07-03 11:57) [12]А можно и до 9, но при желании и до 4
Страницы: 1 вся ветка
Текущий архив: 2004.07.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.023 c