Девятое занятие по С++: работа с файлами

Сегодня мы научимся работать с текстовыми файла на жестком диске! 🙂

Чтение из файла

Давай сразу рассмотрим пример:

#include <iostream>
#include <fstream> //подключаем библиотеку

using namespace std;

int main()
{
   ifstream file ("C:\files\file.txt"); //открываем файл 
   char mas[500];

   while(!file.eof())
   {
       file >> mas;
       cout << mas << endl;
   }
   file.close();
}

ifstream — это по сути тип данных «файл из которого можно читать». Поэтому, чтобы открыть файл, надо создать переменную этого типа, указав в скобках путь к файлу. Обрати внимание на двойные обратные косые черты. Как ты помнишь, обратная косая черта используется для обозначения спецсимволов (‘a’, ‘b’, ‘’, …), поэтому для обозначения самой черты используется символ ‘\’. Не забывай про это!

Далее ты можешь работать с file (имя переменной ты можешь использовать произвольное), как с обычным cin. Только ввод будет не из консоли, а из файла. Приведенный пример читает по словам весь текст из файла и выводит его на экран.

После того, как работа с файлом закончена, его следует закрыть командой close() (file.close();). Это необходимо для операционной системы, чтобы сохранить изменения и подчистить память. Если программа открывает сразу большое количество файлов, могут возникнуть тормоза или даже глюки =(.

По-умолчанию, если вводить данные в массив символов, система считает слово до пробела. Чтобы считать строку до переноса строки, нужно использовать команду getline. Она принимает указатель на строку и размер этой строки.

#include <iostream>
#include <fstream> //подключаем библиотеку

using namespace std;

int main()
{
   ifstream file ("C:\files\file.txt"); //открываем файл 
   char str[500];

   while(!file.eof())
   {
       file.getline(str, 500);
       cout << mas << endl;
   }
   file.close();
}

Запись в файл

А как же записывать что то в файл? Аналогично, но используя тип ofstream. Давай напишем программу, которая будет полностью копировать файл в другой.

#include <iostream>
#include <fstream> //подключаем библиотеку

using namespace std;

int main()
{
   ifstream file ("C:\files\file.txt"); //открываем файл
   ofstream another_file ("C:\copy.txt"); //открываем файл, но для записи 

   char mas[500];

   while(!file.eof()) //.eof() вернет true, когда файл закончился
   {
       file >> mas;
       another_file << mas;
   }
   file.close();
   another_file.close();
}

Все точно также, по аналогии с cout.

Обрати внимание:

1. Нельзя записывать в файл, открытый для чтения. Нельзя читать файл, открытый для записи.

2. Нельзя открыть файл, которого нет, для чтения. Но можно открыть для записи — система создаст его.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *