Spec-Zone.ru › C++

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

Исключения

failure если произошла ошибка (флаг состояния ошибки не goodbit) и exceptions() задано для выбрасывания исключения для этого состояния.

Если внутренняя операция вызывает исключение, оно перехватывается и badbit устанавливается. Если exceptions() установлено для badbit, исключение перебрасывается.

Примечания

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

См. также

write
вставляет блоки символов
(публичный член-функция std::basic_ostream<CharT,Traits>)
operator>>
извлекает отформатированные данные
(публичный член-функция)
readsome
извлекает уже доступные блоки символов
(публичный член-функция)
get
извлекает символы
(публичный член-функция)
getline
извлекает символы до тех пор, пока не будет найден заданный символ
(публичный член-функция)
fread
считывает данные из файла
(функция)

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

Spec-Zone.ru

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