Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.025 c
1-1089116073
Sectey
2004-07-06 16:14
2004.07.18
Есть ли функция обратная TypeInfo?


14-1088579087
oleg_krechetov
2004-06-30 11:04
2004.07.18
Сдача ВКР


11-1076697668
DDA
2004-02-13 21:41
2004.07.18
DecompressBuf в KolZLib


14-1088489953
Nikolay M.
2004-06-29 10:19
2004.07.18
Работа IT-шника в софтовой компаниий vs работа на бизнес - ?


8-1083752286
LexusU
2004-05-05 14:18
2004.07.18
Сглаженный Zoom в TImage