logo search
шпоры по ООП

52.Текстовые файлы для ввода-вывода.

Для работы с файлами в языке С++ имеется набор функций, определенных в библиотеке stdio.h. Перед началом работы с файлом его следует открыть, что достигается с помощью функции fopen(), имеющей следующий синтаксис:

FILE *fopen( const char *filename, const char *mode );

Здесь filename – строка, содержащая путь и имя файла; mode – строка, определяющая режим открытия файла: на чтение или на запись; FILE – специальный тип данных для работы с файлами. Данная функция возвращает значение NULL, если файл не был успешно открыт, иначе – другое значение. Рассмотрим последовательность действий по созданию простого текстового файла на языке C++ и записи в него текстовой информации.

Листинг 5.1. Запись текстовой информации в файл.

#include

int main()

{

char str_file[]=”Строка для файла”;

FILE* fp = fopen(“my_file.txt”,”w”);

if(fp != NULL)

{

printf(“Идет запись информации в файл…\n”);

for(int i=0;i < strlen(str_file);i++)

putc(str_file[i],fp);

}

else printf(“Невозможно открыть файл на запись.\n”);

fclose(fp);

return 0;

}

В данном примере задается специализированный указатель fp типа FILE, который инициализируется функцией fopen(). Функция fopen() в качестве первого аргумента принимает строку, в которой задан путь и имя файла. Вторым параметром определяется способ обработки файла, в данном случае, значение “w”, которое означает открытие файла на запись с удалением всей прежней информации из него. Если файл открыт успешно, то указатель fp не будет равен NULL и с ним возможна работа. В этом случае с помощью функции putc() выполняется запись символов в файл, на который указывает указатель fp. Перед завершением программы открытый файл следует закрыть во избежание в нем потери данных. Это достигается функцией fclose(), которая принимает указатель на файл и возвращает значение 0 при успешном закрытии файла, иначе значение EOF.

Рассмотрим теперь пример программы считывания информации из файла.

Листинг 5.2. Считывание текстовой информации из файла.

#include

int main()

{

char str_file[100];

FILE* fp = fopen(“my_file.txt”,”r”);

if(fp != NULL)

{

int i=0;

char ch;

while((ch = getc(fp)) != EOF)

str_file[i++]=ch;

str_file[i] = ‘\0’;

printf(str_file);

}

else printf(“Невозможно открыть файл на чтение.\n”);

fclose(fp);

return 0;

}

В приведенном листинге функция fopen() открывает файл на чтение, что определяется значением второго аргумента равного «r». Это значит, что в него невозможно произвести запись данных, а только считывание. Сначала выполняется цикл while, в котором из файла считывается символ с помощью функции getc() и выполняется проверка: если считанное значение не равно символу конца файла EOF, то значение переменной ch записывается в массив str_file. Данный цикл будет выполняться до тех пор, пока не будут считаны все символы из файла, т.е. пока не будет достигнут символ EOF. После завершения цикла формируется строка str_file, которая выводится на экран с помощью функции printf(). Перед завершением программы также выполняется функция закрытия файла fclose().

Работа с текстовыми файлами через функции putc и getc не всегда удобна. Например, если необходимо записать или считать строку целиком, то желательно иметь функции, выполняющие эту работу. В качестве таковых можно воспользоваться функциями fputs() и fgets() для работы со строками.