Главная страница
    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.47 MB
Время: 0.023 c
1-1088859529
Vasya.ru
2004-07-03 16:58
2004.07.18
Как программно узнать размер оперативной памяти?


1-1088682822
Klavishnik
2004-07-01 15:53
2004.07.18
Про ячейки в StringGride


1-1089024872
Zabludshiy
2004-07-05 14:54
2004.07.18
Вывести HTML документ без WebBrowser


1-1089190623
CyberSpy2
2004-07-07 12:57
2004.07.18
Перемещение


8-1083745939
Denis
2004-05-05 12:32
2004.07.18
Jpeg Error #52 - что это означает?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский