std::basic_fstream

出自cppreference.com
< cpp‎ | io
在標頭 <fstream> 定義
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_fstream : public std::basic_iostream<CharT, Traits>

類模板 basic_fstream 實現基於文件的流上的高層輸入/輸出。它將 std::basic_iostream 的高層介面賦予基於文件的緩衝(std::basic_filebuf)。

std::basic_fstream 的典型實現只保有一個非派生數據成員:std::basic_filebuf<CharT, Traits> 的一個實例。

cpp/io/ios basecpp/io/basic ioscpp/io/basic istreamcpp/io/basic ostreamcpp/io/basic iostreamstd-basic fstream-inheritance.svg
關於這幅圖像

繼承圖

提供了幾個針對常用字元類型的 typedef:

在標頭 <fstream> 定義
類型 定義
std::fstream std::basic_fstream<char>
std::wfstream std::basic_fstream<wchar_t>

目錄

[編輯] 成員類型

成員類型 定義
char_type CharT[編輯]
traits_type TraitsTraits::char_type 不是 CharT 時程序非良構。[編輯]
int_type Traits::int_type[編輯]
pos_type Traits::pos_type[編輯]
off_type Traits::off_type[編輯]

[編輯] 成員函數

構造文件流
(公開成員函數) [編輯]
(析構函數)
[虛] (隱式聲明)
析構 basic_fstream 和關聯的緩衝區,並關閉文件
(虛公開成員函數) [編輯]
(C++11)
移動文件流
(公開成員函數) [編輯]
(C++11)
交換兩個文件流
(公開成員函數) [編輯]
返回底層未處理的文件設備對象
(公開成員函數) [編輯]
返回底層的由實現定義的句柄
(公開成員函數) [編輯]
文件操作
檢查流是否有關聯文件
(公開成員函數) [編輯]
打開文件,並將它與流關聯
(公開成員函數) [編輯]
關閉關聯文件
(公開成員函數) [編輯]

[編輯] 非成員函數

特化 std::swap 演算法
(函數模板) [編輯]

繼承自 std::basic_istream

成員函數

有格式輸入
提取帶格式數據
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
無格式輸入
提取字元
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
讀取下一個字元,但不會提取它
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
撤銷上一個字元的提取
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
往輸入流中放置一個字元
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
持續提取字元,直到找到給定字元
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
持續提取並丟棄字元,直到找到給定字元
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
按區塊提取字元
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
提取已經可用的字元區塊
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
返回上次無格式輸入操作提取的字元數量
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
尋位
返回輸入位置指示器
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
設置輸入位置指示器
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]
雜項
與底層存儲設備同步
(std::basic_istream<CharT,Traits> 的公開成員函數) [編輯]

成員類

實現為輸出操作準備流的基本邏輯
(std::basic_istream<CharT,Traits> 的公開成員類) [編輯]

繼承自 std::basic_ostream

成員函數

有格式輸出
插入帶格式數據
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
無格式輸出
插入字元
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
按區塊插入字元
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
尋位
返回輸出位置指示器
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
設置輸出位置指示器
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]
雜項
與底層存儲設備同步
(std::basic_ostream<CharT,Traits> 的公開成員函數) [編輯]

成員類

為輸出操作實現流準備的基本邏輯
(std::basic_ostream<CharT,Traits> 的公開成員類) [編輯]

繼承自 std::basic_ios

成員類型

成員類型 定義
char_type CharT
traits_type Traits
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

成員函數

狀態函數
檢查是否沒有發生錯誤,即是否可執行輸入/輸出操作
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否到達了文件末尾
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否發生了可恢復的錯誤
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否已發生不可恢復的錯誤
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否有錯誤發生(fail() 的同義詞)
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
檢查是否沒有發生錯誤(!fail() 的同義詞)
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
返回狀態標誌
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
設置狀態標誌
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
修改狀態標誌
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
格式化
複製格式化信息
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
管理填充字元
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
雜項
管理異常掩碼
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
設置本地環境
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
管理相關的流緩衝區
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
管理綁定的流
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
窄化字元
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]
拓寬字元
(std::basic_ios<CharT,Traits> 的公開成員函數) [編輯]

繼承自 std::ios_base

成員函數

格式化
管理格式標誌
(std::ios_base 的公開成員函數) [編輯]
設置特定格式標誌
(std::ios_base 的公開成員函數) [編輯]
清除特定格式的標誌
(std::ios_base 的公開成員函數) [編輯]
管理浮點數操作的精度
(std::ios_base 的公開成員函數) [編輯]
管理欄位寬度
(std::ios_base 的公開成員函數) [編輯]
本地環境
設置本地環境
(std::ios_base 的公開成員函數) [編輯]
返回當前本地環境
(std::ios_base 的公開成員函數) [編輯]
內部可擴展數組
[靜態]
返回能安全用作 pword()iword() 的索引的程序範圍內獨有的整數
(std::ios_base 的公開靜態成員函數) [編輯]
若必要則調整私有存儲的大小,並訪問位於給定索引的 long 元素
(std::ios_base 的公開成員函數) [編輯]
若需要則調整私有存儲的大小,並訪問位於給定索引的 void* 元素
(std::ios_base 的公開成員函數) [編輯]
雜項
註冊事件回調函數
(std::ios_base 的公開成員函數) [編輯]
設置 C++ 和 C 的輸入/輸出庫是否可以互操作
(std::ios_base 的公開靜態成員函數) [編輯]
成員類
流異常
(std::ios_base 的公開成員類) [編輯]
初始化標準流對象
(std::ios_base 的公開成員類) [編輯]

成員類型和常量

類型 解釋

流打開模式類型

同時定義下列常量:

常量 解釋[編輯]
app 每次寫入前尋位到流結尾[編輯]
binary 二進制模式打開[編輯]
in 為讀打開[編輯]
out 為寫打開[編輯]
trunc 在打開時捨棄流的內容[編輯]
ate 打開後立即尋位到流結尾[編輯]
noreplace (C++23) 以獨佔模式打開[編輯]

(typedef) [編輯]
格式化標誌類型

亦定義下列常量:

常量 解釋[編輯]
dec 為整數輸入/輸出使用十進制底:見 std::dec[編輯]
oct 為整數輸入/輸出使用八進制底:見 std::oct[編輯]
hex 為整數輸入/輸出使用十六進制底:見 std::hex[編輯]
basefield dec | oct | hex。適用於掩碼運算[編輯]
left 左對齊(添加填充字元到右側):見 std::left[編輯]
right 右對齊(添加填充字元到左側):見 std::right[編輯]
internal 居中對齊(添加填充字元到內部選定點):見 std::internal[編輯]
adjustfield left | right | internal。適用於掩碼運算[編輯]
scientific 用科學記數法生成浮點數類型,或在與 fixed 組合時用十六進制記法:見 std::scientific[編輯]
fixed 用定點記法生成浮點數類型,或在與 scientific 組合時用十六進制記法:見 std::fixed[編輯]
floatfield scientific | fixed。適用於掩碼運算[編輯]
boolalpha 以字母數字格式插入並提取 bool 類型:見 std::boolalpha[編輯]
showbase 生成為整數輸出指示數字基底的前綴,貨幣輸入/輸出中要求現金指示符:見 std::showbase[編輯]
showpoint 無條件為浮點數輸出生成小數點字元:見 std::showpoint[編輯]
showpos 為非負數值輸出生成 + 字元:見 std::showpos[編輯]
skipws 在具體輸入操作前跳過前導空白:見 std::skipws[編輯]
unitbuf 在每次輸出操作後沖洗輸出:見 std::unitbuf[編輯]
uppercase 在具體輸出的輸出操作中以大寫等價替換小寫字元:見 std::uppercase[編輯]

(typedef) [編輯]
流狀態類型

亦定義下列常量:

常量 解釋[編輯]
goodbit 無錯誤 [編輯]
badbit 不可恢復的流錯誤 [編輯]
failbit 輸入/輸出操作失敗(格式化或提取錯誤) [編輯]
eofbit 關聯的輸出序列已抵達文件尾 [編輯]

(typedef) [編輯]
尋位方向類型

亦定義下列常量:

常量 解釋[編輯]
beg 流的開始 [編輯]
end 流的結尾 [編輯]
cur 流位置指示器的當前位置 [編輯]

(typedef) [編輯]
指定事件類型
(枚舉) [編輯]
回調函數類型
(typedef) [編輯]

[編輯] 註解

功能特性測試 標準 功能特性
__cpp_lib_fstream_native_handle 202306L (C++26) 原生句柄支持

[編輯] 示例

#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    std::string filename{"test.bin"};
    std::fstream s{filename, s.binary | s.trunc | s.in | s.out};
 
    if (!s.is_open())
        std::cout << "打开 " << filename << " 失败\n";
    else
    {
        // 写入
        double d = 3.14;
        s.write(reinterpret_cast<char*>(&d), sizeof d); // 二进制输出
        s << 123 << "abc";                              // 文本输出
 
        // 对于 fstream,这会移动文件位置指针(放置与获取)
        s.seekp(0);
 
        // 读取
        d = 2.71828;
        s.read(reinterpret_cast<char*>(&d), sizeof d); // 二进制输入
        int n;
        std::string str;
        if (s >> n >> str)                             // 文本输入
            std::cout << "从文件读回:" << d << ' ' << n << ' ' << str << '\n';
    }
}

輸出:

从文件读回:3.14 123 abc

[編輯] 參閱

從輸入/輸出流讀取數據到字元串
(函數模板) [編輯]