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() { // Подготовка файла 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
, файлового потока или буфера
(функция) |
|
|
получает строку символов из файлового потока
(функция) |
|
|
записывает в файл
(функция) |
|
|
Документация C
для
fread
|
|