Лабораторная работа № 10.
«Текстовые и двоичные файлы в С++»
Цель работы: Программирование в С++ с использованием файлов.
Изучение возможностей работы с текстовыми и двоичными файлами (чтение из файла, запись в файл).
Теоретические сведения
Работа с файлами в C (работает и в C++).
Пример работы с текстовым файлом:
#include <iostream.h>
#include <stdio.h>
void main(void)
{
FILE *file;
char* file_name = "file.txt";
char load_string[50] = "none";
file = fopen(file_name, "w");
fputs("string", file);
fclose(file);
file = fopen(file_name, "r");
if(file!= 0)
{
fgets(load_string, 50, file);
cout << "File not found!!!" << endl;
}
fclose(file);
}
Описание функций работы с файлами находятся в библиотеке stdio.h
Сначала надо создать указатель на переменную типа FILE (FILE* file;).
Открытие файла производится вызовом функции fopen (file=fopen(file_name, "w");)
Первый параметр этой функции - имя файла, второй - указывает в каком режиме должен быть открыт файл. "w" - открыть для записи, "r" - открыть для чтения, "a" - дополнение файла(это наиболее часто используемые режимы). Запись и считывание данных из файла осуществляется следующими функциями: fputc, fputs, fgetc, fgets, fprintf, fscanf(описание этих функций см. в stdio.h).
|
|
Закрытие файла осуществляется вызовом функции fclose (fclose(file);).
Работа с файлами с помощью MFC(классы CFile, CStdioFile,...) и стандартный класс MFC CFileDialog.
В библиотеку MFC включено несколько классов для обеспечения работы с файлами. Рассматриваемые ниже классы наследуются от базового класса CFile.
Класс CFile
Класс CFile предназначен для обеспечения работы с файлами. Он позволяет упростить использование файлов, представляя файл как объект, который можно создать, читать, записывать и т.д.
Чтобы получить доступ к файлу, сначала надо создать объект класса CFile. Конструктор класса позволяет сразу после создания такого объекта открыть файл. Но можно открыть файл и позднее, воспользовавшись методом Open.
Открытие и создание файлов
После создания объекта класса CFile можно открыть файл, вызвав метод Open. Методу надо указать путь к открываемому файлу и режим его использования. Прототип метода Open имеет следующий вид:
virtual BOOL Open(LPCTSTR lpszFileName,
UINT nOpenFlags, CFileException* pError=NULL);
В качестве параметра lpszFileName надо указать имя открываемого файла. Можно указать только имя файла или полное имя файла, включающее полный путь к нему.
Второй параметр nOpenFlags определяет действие, выполняемое методом Open с файлом, а также атрибуты файла. Ниже представлены некоторые возможеые значения параметра nOpenFlags:
CFile::modeCreate - Создается новый файл. Если указанный файл существует, то его содержимое стирается и длина файла устанавливается равной нулю.
CFile::modeNoTruncate - Этот файл предназначен для использования совместно с файлом CFile::modeCreate. Если создается уже существующий файл, то его содержимое не будет удалено.
|
|
CFile::modeRead - Файл открывается только для чтения.
CFile::modeReadWrite - Файл открывается для записи и для чтения.
CFile::modeWrite - Файл открывается только для записи.
CFile::typeText - Используется классами, порожденными от класса CFile, например CStdioFile, для работы с файлами в текстовом режиме. Текстовый режим обеспечивает преобразование комбинации символа возврата каретки и символа перевода строки.
CFile::Binary - Используется классами, порожденными от класса CFile, например CStdioFile, для работы с файлами в двоичном режиме.
Необязательный параметр pError, который является указателем на объект класса CFileException, используется только в том случае, если выполнение операции с файлом вызовет ошибку. При этом в объект, указываемый pError, будет записана дополнительная информация.
Метод Open возвращает не нулевое значение, если файл открыт и нуль в случае ошибки. Ошибка при открытии файла может случиться, например, если методу Open указан для чтения несуществующий файл.