Переменные, массивы и структуры хранятся в оперативной памяти компьютера, следовательно, выделенная под них память освобождается после завершения работы программы, и данные, содержащиеся в них, пропадают. Этот факт можно проверить, открыв диспетчер задач и выбрав вкладку «Быстродействие»:
На данной вкладке можно увидеть объем занятой оперативной памяти:
Напишем теперь программу, содержащую объявление большого массива:
int mas[10000000];
Запуск этой программы приведет к тому, что объем занятой оперативной памяти увеличится:
После завершения работы программы объем занятой памяти станет прежним:
Очевидно, что такая ситуация недопустима, если данные, с которыми работает программа, остаются актуальными и после ее завершения. Например, записи о рекордах в компьютерной игре не сбрасываются после выхода из нее, а список телефонов в телефонной базе остается неизменным после выхода из оболочки этой базы. Еще одна проблема, связанная с оперативной памятью, заключается в том, что ее размер относительно невелик, и хранить в ней большие объемы информации невозможно.
Возможность хранить информацию независимо от того, работает программа или нет, а также хранить большие объемы информации предоставляют файлы. Они находятся на жестком диске, и их содержимое загружается в оперативную память по мере необходимости.
Запись информации в файл
Для записи информации в файл предназначены несколько функций, среди которых
fputc();
fputs();
fprintf().
Запись осуществляется в четыре шага:
1. описание файловой переменной (файлового указателя);
2. открытие файла для записи;
3. запись информации в файл;
4. закрытие файла.
Следующий фрагмент кода демонстрирует эти шаги в действии:
//Описание файловой переменной myFile
FILE* myFile;
//Открытие файла для записи
myFile = fopen("hello.txt", "w");
//Запись сообщения «Привет!» в файл
fputc('П', myFile); fputc('р', myFile);
fputc('и', myFile); fputc('в', myFile);
fputc('е', myFile); fputc('т', myFile);
fputc('!', myFile);
//Закрытие файла
fclose(myFile);
Функция fputc() записывает в файл hello.txt один символ.
Результатом запуска программы будет создание на диске файла hello.txt, содержимым которого станет фраза «Привет!» Следует обратить внимание на то, что, если путь к файлу не указан, то он создается в той же папке, что и файл с кодом программы (в данном случае – это файл main.cpp):
Проверьте содержимое файла, открыв его в любом текстовом редакторе:
Функции fputs() и fprintf() работают аналогично их аналогам для консольного вывода: функциям puts() и printf(). Отличие заключается только в том, что нужно указать файл, в который осуществляется запись. Функция fputs() записывает строку в файл:
fputs("Это моя строка.", myFile);
Функция fprintf() осуществляет запись в файл согласно шаблону:
fprintf(myFile, "%s получил %d.", "Павел", 5);
Указание пути к файлу
Путь к файлу может быть двух видов:
· относительный
· абсолютный
При указании относительного пути точкой отсчета является папка, где хранится файл с программой (*.cpp); при использовании абсолютного пути точка отсчета – это «мой компьютер».
При использовании относительного пути можно писать символ «..», который позволяет обратиться к родительской папке, аналогично любому файловому менеджеру:
Функция открытия файла fopen() принимает два параметра; первый – это имя файла, а второй – режим открытия файла. Для создания файла в другой папке следует указать его полный путь.