Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
14-1088585984
Vasya.ru
2004-06-30 12:59
2004.07.18
Утилита, ищущая одинаковые mp3 файлы


14-1088404999
Шишкин Илья
2004-06-28 10:43
2004.07.18
Посоветуйте программу для LAN


14-1088507553
QuasiLamo
2004-06-29 15:12
2004.07.18
Срочно! Нужен кто-нибудь русскоговорящий


1-1088754538
Iconka
2004-07-02 11:48
2004.07.18
про StringGrid


14-1088359607
Sanek_metaller
2004-06-27 22:06
2004.07.18
Куда деваются клипы с 3MP3.ru





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский