std::basic_istream<CharT,Traits>::read
basic_istream& read( char_type* s, std::streamsize count ); |
Извлекает символы из потока.
Ведёт себя как UnformattedInputFunction. После создания и проверки объекта sentry извлекает символы и сохраняет их в последовательные ячейки массива символов, на первый элемент которого указывает s. Символы извлекаются и сохраняются до наступления одного из следующих условий:
-
Было извлечено и сохранено
countсимволов. - Во входной последовательности наступает конец файла (в этом случае вызывается
setstate(failbit|eofbit)). Количество успешно извлечённых символов можно узнать с помощьюgcount().
Параметры
| s | - | указатель на массив символов, в который будут записаны символы |
| count | - | количество символов для чтения |
Возвращаемое значение
*this
Исключения
failure, если произошла ошибка (флаг состояния ошибки не равен goodbit) и для этого состояния установлено exceptions(), чтобы выбросить исключение.
Если внутренняя операция выбрасывает исключение, оно перехватывается и устанавливается badbit. Если для badbit установлено exceptions(), исключение выбрасывается повторно.
Примечания
При использовании локали без преобразований (локаль по умолчанию не выполняет преобразований) переопределённая реализация этой функции в std::basic_ifstream может быть оптимизирована для пакетного ввода-вывода без копирования (путём переопределения std::streambuf::xsgetn).
Пример
#include <cstdint>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
int main()
{
// read() is often used for binary I/O
std::string bin = {'\x12', '\x12', '\x12', '\x12'};
std::istringstream raw(bin);
std::uint32_t n;
if (raw.read(reinterpret_cast<char*>(&n), sizeof n))
std::cout << std::hex << std::showbase << n << '\n';
// prepare file for next snippet
std::ofstream("test.txt", std::ios::binary) << "abcd1\nabcd2\nabcd3";
// read entire file into string
if (std::ifstream is{"test.txt", std::ios::binary | std::ios::ate})
{
auto size = is.tellg();
std::string str(size, '\0'); // construct string to stream size
is.seekg(0);
if (is.read(&str[0], size))
std::cout << str << '\n';
}
}
Вывод:
0x12121212 abcd1 abcd2 abcd3
См. также
| вставляет блоки символов (открытая функция-член std::basic_ostream<CharT,Traits>) |
|
| извлекает форматированные данные (открытая функция-член) |
|
| извлекает уже доступные блоки символов (открытая функция-член) |
|
| извлекает символы (открытая функция-член) |
|
| извлекает символы до обнаружения заданного символа (открытая функция-член) |
|
| читает данные из файла (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/read