std::basic_istream<CharT,Traits>:: read
|
basic_istream
&
read
(
char_type
*
s,
std::
streamsize
count
)
;
|
||
Извлекает символы из потока.
Ведут себя как UnformattedInputFunction . После создания и проверки сторожевого объекта извлекает символы и сохраняет их в последовательные ячейки массива символов, первый элемент которого указывается s . Символы извлекаются и сохраняются до тех пор, пока не выполнится любое из следующих условий:
- count символов было извлечено и сохранено.
- условие конца файла возникает во входной последовательности (в этом случае, setstate ( failbit | eofbit ) вызывается). Количество успешно извлеченных символов можно запросить с помощью gcount() .
Содержание |
Параметры
| s | - | указатель на массив символов для хранения считываемых символов |
| count | - | количество считываемых символов |
Возвращаемое значение
* this
Исключения
Если внутренняя операция выбрасывает исключение, оно перехватывается и
badbit
устанавливается. Если
exceptions()
установлен для
badbit
, исключение выбрасывается повторно.
Примечания
При использовании неконвертирующей локали (локаль по умолчанию является неконвертирующей), переопределение этой функции в std::basic_ifstream может быть оптимизировано для массового ввода-вывода без копирования (посредством переопределения std::streambuf::xsgetn ).
Пример
#include <cstdint> #include <fstream> #include <iostream> #include <sstream> #include <string> int main() { // read() часто используется для бинарного ввода-вывода 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'; // подготовка файла для следующего фрагмента std::ofstream("test.txt", std::ios::binary) << "abcd1\nabcd2\nabcd3"; // чтение всего файла в строку if (std::ifstream is{"test.txt", std::ios::binary | std::ios::ate}) { auto size = is.tellg(); std::string str(size, '\0'); // создание строки размером с поток is.seekg(0); if (is.read(&str[0], size)) std::cout << str << '\n'; } }
Вывод:
0x12121212 abcd1 abcd2 abcd3
Смотрите также
|
вставляет блоки символов
(публичная функция-член
std::basic_ostream<CharT,Traits>
)
|
|
|
извлекает форматированные данные
(публичная функция-член) |
|
|
извлекает уже доступные блоки символов
(публичная функция-член) |
|
|
извлекает символы
(публичная функция-член) |
|
|
извлекает символы до обнаружения заданного символа
(публичная функция-член) |
|
|
читает из файла
(функция) |