Главная страница
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.021 c
14-1088162043
Nickola2
2004-06-25 15:14
2004.07.18
Пожалуйста, помогите с дистрибьютивом.


1-1088953071
TUser
2004-07-04 18:57
2004.07.18
Не тот эксепшен Ж)


14-1088597348
panov
2004-06-30 16:09
2004.07.18
Еще одного спамера подцепил на дозвон.


11-1076660898
Mist
2004-02-13 11:28
2004.07.18
Отображение ShortCut(Accelerator) в главном меню


1-1088881672
killer
2004-07-03 23:07
2004.07.18
Transparent в RadioButton