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

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

Работа с бинарными файлами производится посредством посимвольного чтения-записи. Поскольку один объект char соответствует одному байту, то фактически речь идет о побайтовых записи/чтения.

Запись файла

Для записи символа в файл применяется функция putc(), которая имеет следующий прототип:

int putc(int c, FILE *stream);

В качестве параметров в функцию передаются указатель на файловый поток и символ, который надо записать. Результатом функции является записанный символ.

#include <stdio.h>
 
int main(void)
{
	// записываемая строка
    char message[] = "Hello METANIT.COM!";
	// файл для записи
    char * filename = "data.txt";
	// находим длину записываемой строки
    int n = sizeof(message)/sizeof(message[0]);

    FILE * fp= fopen(filename, "w");
    if(fp)
    {
        // посимвольно записываем в файл
        for(int i=0; i < n; i++)
        {
            putc(message[i], fp);
        }
        
        fclose(fp);
        printf("File has been written\n");
    }
}

Здесь мы пробегаемся по массиву символов message и каждый из них заносим в файл data.txt (который располагается в текущей папке), передавая каждый символ в функцию putc().

Чтение файла

Для чтения одного символа применяется функция getc() (функция fgetc() аналогична). Она имеет следующий прототип:

int getc(FILE *stream);

В качестве параметра в функцию передается указатель на файловый поток, а возвращаемым значением является считанный из файла символ, точнее его числовой код.

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

Считаем ранее записанный файл data.txt:

#include <stdio.h>
 
int main(void)
{
	// символ для считывания
    char c;
	// файл для чтения
    char * filename = "data.txt";

    FILE * fp= fopen(filename, "r");
    if(fp)
    {
        // считываем посимвольно из файла
        while((c=getc(fp))!= EOF)
        {
            printf("%c", c);
        }
        fclose(fp);
    }
}

Здесь считываем по одному символу из файла через вызов getc(). Здесь стоит обратить внимание на процесс считывания файла. Когда будет достигнут конец файла, функция getc() возвратит значение EOF ("end of file" - конец файла)., которое определено в файле stdio.h. Поэтому мы можем считывать файл, пока не получим значение EOF.

В итоге на консоль будет выведено ранее записанное сообщение.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850