Namespaces
Variants

std::basic_istream<CharT,Traits>:: read

From cppreference.net
basic_istream & read ( char_type * s, std:: streamsize count ) ;

Извлекает символы из потока.

Ведут себя как UnformattedInputFunction . После создания и проверки сторожевого объекта извлекает символы и сохраняет их в последовательные ячейки массива символов, первый элемент которого указывается s . Символы извлекаются и сохраняются до тех пор, пока не выполнится любое из следующих условий:

  • count символов было извлечено и сохранено.
  • условие конца файла возникает во входной последовательности (в этом случае, setstate ( failbit | eofbit ) вызывается). Количество успешно извлеченных символов можно запросить с помощью gcount() .

Содержание

Параметры

s - указатель на массив символов для хранения считываемых символов
count - количество считываемых символов

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

* this

Исключения

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

Если внутренняя операция выбрасывает исключение, оно перехватывается и 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> )
извлекает форматированные данные
(публичная функция-член)
извлекает уже доступные блоки символов
(публичная функция-член)
извлекает символы
(публичная функция-член)
извлекает символы до обнаружения заданного символа
(публичная функция-член)
читает из файла
(функция)