Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 00:32   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию Чтение текстовых файлов.

Каков наиболее оптимальный путь считывания текстового файла, при условии, что мне нужно считать весь этот файл.

ifstream if("test.txt")
if.get(ch)

Читать по символу, аки if.get() как-то нелогично. Я ведь правильно понимаю, что ради каждого последующего символа прога будет по новой читать файл?

Можно построчно, с помощью getline(). Но тоже мелковато.

Вопросы:
1) А можно как-нибудь целиком файлик или по кускам зохавать в мою программу?

2) Что делает if.rdbuf(), я не совсем въехал.
3) И в частности почему после

cout<<infile.rdbuf()<<endl;
cout<<"=============="<<endl;


Линия "==============" не рисуется?

4) И вот тут вот в описании "istream& get (char* s, streamsize n );"
что за стреамсизе? Как с ним работать? Я с ним тока сегментейшн фаултов понаделал и кажется уронил пиджин.

P.S. Я так понял при работе с ifstream уже идёт работа с загруженным в оперативку кусочком файла?
Блин, как всё сложно.

Последний раз редактировалось the_deer_one; 05.04.2010 в 01:10.
the_deer_one вне форума Ответить с цитированием
Старый 05.04.2010, 09:30   #2
evgn
Разрабатываюсь....
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 68
По умолчанию

Все очень просто
1)
Можно например так:
Код:
int len;
  char * buffer;

  ifstream is;
  is.open ("test.txt", ios::binary );

//здесь получим размер файла
  is.seekg (0, ios::end);
  len = is.tellg();
  is.seekg (0, ios::beg);

  // резервируем память
  buffer = new char [len];

  // читаем весь файл в память
  is.read (buffer,len);
  //закрываем файл
  is.close();

  cout.write (buffer,len);
//не забудем освободить память
  delete[] buffer;
2) Возвращает указатель на буфер потока
3).....
4) это максимальное количество байт которые могут быть прочитаны включая завершающий \0.

При работе с ifstream идет обычная работа с файлом, никто его никуда не грузит, пока ты сам не попросишь об этом. И считывать файл посимвольно тоже можно, он читает каждый раз из файла один символ. И построчно тоже можно.
p.s. Кстати все ответы на твои вопросы есть в мануле на с++.

Последний раз редактировалось evgn; 05.04.2010 в 14:15.
evgn вне форума Ответить с цитированием
Старый 05.04.2010, 14:00   #3
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Ага, почти всё ясно, пасиб. )

Цитата:
При работе с ifstream идет обычная работа с файлом, никто его никуда не грузит
Х.З. в рсдн проскользнуло что по факту грузит. Я не нашёл более-менее подробного объяснения работы потоков.

Цитата:
p.s. Кстати все ответы на твои вопросы есть в мануле на с++.
Где этот мануал?
the_deer_one вне форума Ответить с цитированием
Старый 05.04.2010, 14:06   #4
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

http://www.cplusplus.com/reference/iostream/ifstream/
Indian вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка текстовых файлов Маринка777 Общие вопросы .NET 2 22.12.2009 17:37
Чтение фалов как текстовых Gerzs Общие вопросы Delphi 17 10.10.2009 14:34
копирование текстовых файлов teacher Общие вопросы Delphi 4 16.02.2008 20:29
Сравнение текстовых файлов BR17UY Общие вопросы Delphi 15 07.05.2007 20:18