Чтение и запись текстовых файлов

Последнее обновление: 09.01.2023

При работе с текстовыми файлами граздо проще работать с данными не как с отдельными символами, а как со строками с помощью функций fgets() и fputs().

Запись текстового файла

Функция fputs() записывает в файл строку, то есть набор символов, который завершается символом '\0'. Она имеет следующий прототип:

int fputs(const char *s, FILE *stream);

Первый параметр функции - записываемая строка, а второй - указатель на файловый поток. В качестве результата функция возвращает неотрицательное целое число. При ошибках в процессе записи возвращается значение EOF.

При записи строки нулевой символ '\0' в файл не записывается.

Например, запишем строку в файл:

#include <stdio.h>
 
int main(void)
{
    // строка для записи
    char * message = "Hello METANIT.COM!\nAn apple a day keeps the doctor away";
    // файл для записи
    char * filename = "data.txt";
    // запись в файл
    FILE *fp = fopen(filename, "w");
    if(fp)
    {
        // записываем строку
        fputs(message, fp);
        fclose(fp);
        printf("File has been written\n");
    }
}

Запись довольно проста: открываем файл на запись и с помощью вызова fputs(message, fp) записываем в файл искомую строку.

Чтение текстового файла

Функция fgets() считывает из файла одну строку и имеет следующий прототип:

char * fgets(char *s, int n, FILE *sream);

Первый параметр char *s представляет строку, в которую производится считывание. Второй параметр - число n указывает, сколько символов необходимо считывать. И третий параметр представляет файловый поток, из которого производится считывание.

При вызове функция считывает из файла не более n-1 символов. Функция прекращает чтение, когда прочтет n-1 символов или встретит символ переноса строки \n. Все считанные символы записываются в строку s, в том числе символ \n. И также конец каждой строки дописывается нулевой символ '\0'.

При успешном завершении функция возвращает указатель s, а при ошибке или достижении конца файла возвращается значение NULL.

Считаем данные из выше записанного файла "data.txt":

#include <stdio.h>
 
int main(void)
{
    // файл чтения
    char * filename = "data.txt";
    // буфер для считавания данных из файла
    char buffer[256];
    // чтение из файла
    FILE *fp = fopen(filename, "r");
    if(fp)
    {
        // пока не дойдем до конца, считываем по 256 байт
        while((fgets(buffer, 256, fp))!=NULL)
        {
            printf("%s", buffer);
        }
        fclose(fp);
    } 
}

Здеcь открываем файл на чтение и в цикле считываем из файла по 256 символов и выводим их на консоль с помощью вызова fgets(cc, 256, fp). Когда данные в файле закончатся, функция возвратит NULL, и произойдет выход из цикла.

Копирование файлов

Другой пример работы с текстовыми файлами - копирование содержимого из одного файла в другой:

#include <stdio.h>

int main(void)
{
	char * filename1 = "data1.txt";
	char * filename2 = "data2.txt";
	char buffer[256];
	FILE *f1 = fopen(filename1, "r");   // файл на чтение
    FILE *f2 = fopen(filename2, "w");   // файл на запись
	if(!f1 || !f2)
	{
		printf("Error occured while opening file\n");
	}
	else
	{
		// пока не дойдем до конца, считываем по 256 байт из файла f1
        while((fgets(buffer, 256, f1))!=NULL)
        {
            // записываем строку в файл f2
            fputs(buffer, f2);
            printf("%s", buffer);
        }
	}
	
	fclose(f1);
	fclose(f2);
	
	return 0;
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850