Главная страница
    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.045 c
8-1083745939
Denis
2004-05-05 12:32
2004.07.18
Jpeg Error #52 - что это означает?


14-1088235669
KilkennyCat
2004-06-26 11:41
2004.07.18
Ваше отношение к информатике как к науке?


14-1088176987
Axis_of_Evil
2004-06-25 19:23
2004.07.18
написание прошивок для Nokia или Samsung


14-1088275789
reticon
2004-06-26 22:49
2004.07.18
Что-то с днем рождения никто не поздравляет :-)))


3-1087557086
bSava
2004-06-18 15:11
2004.07.18
Подскажите как узнать подключенных пользователей?!





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