名前空間
変種
操作

std::basic_istream::read

提供: cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
basic_istream& read( char_type* s, std::streamsize count );

文字をストリームから抽出します。

UnformattedInputFunction として動作します。 sentry オブジェクトの構築および確認の後、文字を抽出し、それらを最初の要素が s によって指されている文字配列の連続する位置に格納します。 文字は以下の条件のいずれかが発生するまで抽出され格納されます。

  • count 個の文字が抽出され格納された。
  • 入力シーケンスでファイル終端条件が発生した (この場合 setstate(failbit|eofbit) が呼ばれます)。 抽出に成功した文字数は gcount() を使用して問い合わせることができます。

目次

[編集] 引数

s - 文字を格納する文字配列へのポインタ
count - 読み込む文字数

[編集] 戻り値

*this

[編集] 例外

エラーが発生し (エラー状態フラグが goodbit でなく)、その状態に対して投げるために exceptions() がセットされている場合は failure

内部の操作が例外を投げた場合、それはキャッチされ、 badbit がセットされます。 exceptions()badbit に対してセットされていれば、その例外が投げ直されます。

[編集] ノート

非変換ロケール (デフォルトのロケールは非変換です) を使用しているとき、 std::basic_ifstream のこの関数のオーバーライドはゼロコピーバルク I/O に最適化されているかもしれません (std::streambuf::xsgetn をオーバーライドすることによって)。

[編集]

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdint>
 
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のパブリックメンバ関数) [edit]
書式付きデータを抽出します
(パブリックメンバ関数) [edit]
すでに利用可能な文字のブロックを抽出します
(パブリックメンバ関数) [edit]
文字を抽出します
(パブリックメンバ関数) [edit]
指定された文字が見つかるまで文字を抽出します
(パブリックメンバ関数) [edit]
ファイルから読み込みます
(関数) [edit]