WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Буферезированное чтение из файла

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Буферезированное чтение из файла
klep опубликован 15-12-2001 21:07 MSK   Click Here to See the Profile for klep   Click Here to Email klep  
Задача очень простая нужно получать из файла байты данных. Аналог while(ch=fgetch(in),ch>0);
Только для увеличения быстродействия хочется считывать по блочно ,а возвращать по символьно.

tmp[255];

char GetCharEx(FILE *in)
{
char buffer[255];
int bsize;

// [skip]
// флажок того что tmp не выбран полностью
// если выбран снова считываем с файла

while(!(feof(in)) )
{

bsize = fread(buffer,1,sizeof(buffer),in);
strncpy(tmp,buffer,bsize);
}


return tmp[0]; // к примеру.индекс произвольный
}


вот что-то типа такого.
Вопрос как это реализвать более красиво??????????

kuss опубликован 15-12-2001 21:29 MSK     Click Here to See the Profile for kuss  Click Here to Email kuss     
а этоу тебя работает?? по моему не должно, потому что при вызове функции снова и снова будет считывание из файла.
Лучше сперва считать отдельно, а потом выдергивать символы.

char *buf=malloc(256);
FILE *in=fopen("dat","r");

read(int c)
{
fread(buf,1,c,in);
}

char getchar(int i)
{
return buf[i];
}

rivitna опубликован 16-12-2001 12:06 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
Трудно представить для чего нужно такое извращение...
Когда в моих программках я работаю с файлами, стараюсь весь файл считывать в буфер, слава Богу не DOS, затем работаю с буфером.

Но с другой стороны функции работы с файлами сами по себе буферизованы, то есть по одному байту с файлами точно не работают, к тому же, кто гарантирует, что твой буфер, не попадет в своп. Короче, на мой взгляд, извращение

Flex Ferrum опубликован 16-12-2001 15:00 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
klep:
Не парься. Файл, с которым ты работаешь, буфферизируется по крайне мере два раза - один раз самой системой, а другой - CRTL. К тому же в классах iostream это тоже реализованно.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.