名前空間
変種
操作

std::fread

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
C形式I/O
型とオブジェクト
関数
ファイルアクセス
直接入出力
fread
非書式化入出力
書式付き入力
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
書式付き出力
ファイルポジショニング
エラーハンドリング
ファイル操作
 
ヘッダ<cstdio>で定義
std::size_t fread( void* buffer, std::size_t size, std::size_t count, std::FILE* stream );

指定された入力ストリームstreamから、配列bufferに最大count個のオブジェクトを読み込みます。これは、各オブジェクトに対してsizestd::fgetcを呼び出し、取得した結果を順にbufferの連続する位置に格納するのと同じです。bufferは、unsigned charの配列として再解釈されます。ストリームのファイル位置指示子は、読み取られた文字数だけ進められます。

オブジェクトがTriviallyCopyableでない場合、動作は未定義です。

エラーが発生した場合、ストリームのファイル位置指示子の結果の値は未定義になります。部分的な要素が読み取られた場合、その値は未定義になります。

目次

[編集] パラメータ

buffer - 読み取る配列の最初のオブジェクトへのポインタ
size - 各オブジェクトのバイト単位のサイズ
count - 読み取るオブジェクトの数
stream - 読み込む入力ファイルストリーム

[編集] 戻り値

正常に読み取られたオブジェクトの数。エラーまたはファイルの終端条件が発生した場合、countより少ない場合があります。

sizeまたはcountがゼロの場合、freadはゼロを返し、それ以外の操作は行いません。

freadはファイルの終端とエラーを区別せず、呼び出し元はどちらが発生したかを判断するためにstd::feofおよびstd::ferrorを使用する必要があります。

[編集]

#include <cstddef>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
 
int main()
{
    // Prepare file
    std::ofstream("test.txt") << 1 << ' ' << 2 << '\n';
    std::FILE* f = std::fopen("test.txt", "r");
 
    std::vector<char> buf(4); // char is trivially copyable
    const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f);
 
    std::cout << "Read " << n << " object" << (n > 1 ? "s" : "") << ": "
              << std::hex << std::uppercase << std::setfill('0');
    for (char n : buf)
        std::cout << "0x" << std::setw(2) << static_cast<short>(n) << ' ';
    std::cout << '\n';
 
    std::vector<std::string> buf2; // string is not trivially copyable
//  This would result in undefined behavior:
//  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
}

実行結果の例

Read 4 objects: 0x31 0x20 0x32 0x0A

[編集] 関連項目

stdin、ファイルストリーム、またはバッファから書式付き入力を読み取ります。
(関数) [編集]
ファイルストリームから文字列を取得する
(関数) [編集]
ファイルに書き込む
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)