Namespaces
Variants

std:: fread

From cppreference.net
< cpp ‎ | io ‎ | c
Определено в заголовочном файле <cstdio>
std:: size_t fread ( void * buffer, std:: size_t size, std:: size_t count, std:: FILE * stream ) ;

Считывает до count объектов в массив buffer из заданного входного потока stream , как если бы вызывался std::fgetc size раз для каждого объекта, и сохраняет результаты, в полученном порядке, в последовательные позиции buffer , который интерпретируется как массив unsigned char . Индикатор позиции файла для потока продвигается на количество прочитанных символов.

Если объекты не являются TriviallyCopyable , поведение не определено.

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

Содержание

Параметры

buffer - указатель на первый объект в массиве для чтения
size - размер каждого объекта в байтах
count - количество объектов для чтения
stream - входной файловый поток для чтения

Возвращаемое значение

Количество успешно прочитанных объектов, которое может быть меньше, чем count если возникает ошибка или условие конца файла.

Если size или count равны нулю, fread возвращает ноль и не выполняет других действий.

fread не различает конец файла и ошибку, и вызывающая сторона должна использовать std::feof и std::ferror для определения того, что произошло.

Пример

#include <cstddef>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
int main()
{
    // Подготовка файла
    std::ofstream("test.txt") << 1 << ' ' << 2 << '\n';
    std::FILE* f = std::fopen("test.txt", "r");
    std::vector<char> buf(4); // char является тривиально копируемым
    const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f);
    std::cout << "Прочитано " << n << " объект" << (n > 1 ? "ов" : "") << ": "
              << std::hex << std::uppercase << std::setfill('0');
    for (char n : buf)
        std::cout << "0x" << std::setw(2) << static_cast<short>(n) << ' ';
    std::cout << '\n';
    std::vector<std::string> buf2; // string не является тривиально копируемым
//  Это привело бы к неопределенному поведению:
//  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
}

Возможный вывод:

Прочитано 4 объекта: 0x31 0x20 0x32 0x0A

Смотрите также

считывает форматированный ввод из stdin , файлового потока или буфера
(функция)
получает строку символов из файлового потока
(функция)
записывает в файл
(функция)