Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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) байт?


Наверх

Титульная страница Поиск, карта сайта Написать письмо