fread() функция языка Си. Чтение из файла заданного количества байт.

Читает из файла и помещает в буфер заданное количество элементов размером с заданным количеством байт, смещает указатель файла на конец считанных данных.


#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t num, FILE *stream);
ptr - Указатель на буфер в который будут записаны считанные данные
size - Размер считываемого элемента в байтах (1 для байта или char, 2 для short, 4 для int)
num - Количество элементов для считывания (размер каждого элемента size байт)
stream - Указатель на файл (полученный например функцией fopen() )
Возвращает количество считанных элементов или NULL в случае ошибки или конца файла

Пример программы с использование функции fread().


#include <stdio.h> // printf(), fopen(), fread(), fwrite(), fclose()
#include <time.h> // clock()
int main(){
    FILE *file_src = fopen((char*)"src.wav",  "rb"); // файл источника звука
    FILE *file_dst = fopen((char*)"dst.wav",  "wb"); // файл для записи звука
    if(file_src == NULL || file_dst == NULL){ // Проверяем что все файлы открылись
        printf("File not open! \n");
    }else{ // Файлы доступны для записи и чтения
        const unsigned int BUF_SIZE = 44; // Размер буфера данных
        short buffer[BUF_SIZE]; // Буфер для данных (16 битные отсчеты)
        fread(buffer, 1, BUF_SIZE, file_src); // Читаем заголовок wav файла (44 байта)
        fwrite(buffer, 1, BUF_SIZE, file_dst); // Пишем заголовок wav файла
        while (!feof(file_src)){ // Читаем в цикле файл до конца файла
            unsigned int num_read_elem = fread(buffer, sizeof(short), BUF_SIZE, file_src); // Читаем блок данных размером num_read_elem
            for(unsigned int n = 0; n < num_read_elem; n++){ // Обрабатываем данные
                buffer[n] /= 2; // Уменьшаем амплитуду отсчета в 2 раза
            }
            fwrite(buffer, sizeof(short), num_read_elem, file_dst); // Пишем блок данных
        }
        fclose(file_src); // Закрываем файл
        fclose(file_dst); // Закрываем файл
        printf("Program execute time = %ld ms \n", clock());
    }
}
2023-03-14



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

fclose() функция языка Си. Закрывает файл для записи или чтения.
feof() функция языка Си. Проверка на достижение конца файла.
fgets() функция языка Си. Чтение строки из файла или с клавиатуры.
fopen() функция языка Си. Открытие файла для чтения или записи.
fread Си, чтение из файла Си
fwrite() функция языка Си. Запись в файл заданного числа байт.