Spec-Zone.ru › C++

std::fread

Определено в заголовке <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()
{
    // Prepare file
    std::ofstream("test.txt") << 1 << ' ' << 2 << '\n';
    std::FILE* f = std::fopen("test.txt", "r");
 
    std::vector<char> buf(4); // char is trivially copyable
    const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f);
 
    std::cout << "Read " << n << " object" << (n > 1 ? "s" : "") << ": "
              << 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 is not trivially copyable
//  This would result in undefined behavior:
//  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
}

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

Read 4 objects: 0x31 0x20 0x32 0x0A

См. также

scanffscanfsscanf
считывает форматированный ввод из stdin, файла-потока или буфера
(функция)
fgets
получает строку символов из файла-потока
(функция)
fwrite
записывает в файл
(функция)
C документация для fread

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/fread

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API