C++ 文件和流

在本章中,我们将详细探讨如何使用 C++ 处理文件和输入输出流。C++ 提供了强大的标准库支持,使得文件操作变得简单而高效。

文件流概述

文件流是 C++ 中用于读写文件的类。主要的文件流类包括 std::ifstreamstd::ofstreamstd::fstream。这些类分别用于文件的输入、输出和双向操作。

std::ifstream 类

std::ifstream 类用于从文件中读取数据。它继承自 std::istream 类。

创建文件流对象

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- ------------------------- -- ----
    -- ------------ - -- ----------
        --------- -- -------- -- ----------
        ------ --
    -

    -- ------
-

读取文件内容

-- -------------------- ---- -------
-------- ---------
-------- ----------
-------- --------

--- ------ -
    ------------- -------------------------

    -- ------------ -
        --------- -- -------- -- ----------
        ------ --
    -

    ----------- -----
    ----- ------------------- ------ - -- -- ------- --------
        --------- -- ---- -- ----------
    -

    ------------------ -- ----
    ------ --
-

std::ofstream 类

std::ofstream 类用于向文件写入数据。它继承自 std::ostream 类。

创建文件流对象

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- ------------------------- -- -------

    -- ------------- - -- ----------
        --------- -- -------- -- ----------
        ------ --
    -

    -- ------
-

向文件写入数据

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- -------------------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    ---------- -- ------- ------- -- ---------- -- --------
    ---------- -- --- -- ---------- -- -------

    ------------------- -- ----
    ------ --
-

std::fstream 类

std::fstream 类用于同时进行文件的读写操作。它继承自 std::iostream 类。

创建文件流对象

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------ ------------------------- ------------ - --------------- -- --------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    -- ------
-

文件的读写操作

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------ ------------------------- ------------ - ---------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    ----------- --------
    ------------------- --------------- -- -------
    --- ------ - ------------------- -- ------
    ------------------- --------------- -- -------

    ----------------------- -- --------------
    ---------------------------- -------- -- ------

    --------- -- ------- -- ----------
    --------- -- ------- -- ----------

    ------------------- -- ------
    ------------------- --------------- -- -------
    ---------- -- ---------- -- ---------

    -------------------
    ------ --
-

文件流操作符重载

C++ 的文件流类提供了许多操作符重载,使得文件操作更加方便。

读取和写入基本类型

文件流可以自动处理基本类型的读写操作,如整型、浮点型等。

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- --------------------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    --- ------ - ---
    ---------- -- ------ -- ---------- -- ----

    ------ ----- - -----
    ---------- -- ----- -- ---------- -- -----

    -------------------

    ------------- -------------------------

    -- ------------ -
        --------- -- -------- -- ----------
        ------ --
    -

    --- -----------
    --------- -- ----------- -- ----
    --------- -- ------- - -- ---------- -- ----------

    ------ ----------
    --------- -- ---------- -- -----
    --------- -- -------- - -- --------- -- ----------

    ------------------
    ------ --
-

使用 getline 读取字符串

getline 函数可以从文件流中读取一行文本,并将其存储在一个字符串变量中。

-- -------------------- ---- -------
-------- ---------
-------- ----------
-------- --------

--- ------ -
    ------------- -----------------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    ---------- -- ------- ---- -- ----------
    ---------- -- -------- -- ---- ---- -- ----------

    -------------------

    ------------- ----------------------

    -- ------------ -
        --------- -- -------- -- ----------
        ------ --
    -

    ----------- -----
    ----- ------------------- ------ -
        --------- -- ---- -- ----------
    -

    ------------------
    ------ --
-

文件模式

C++ 文件流提供了多种打开文件的模式,通过组合这些模式,可以灵活地控制文件的操作行为。

文件打开模式

  • std::ios::in: 仅用于读取。
  • std::ios::out: 仅用于写入。
  • std::ios::app: 在文件末尾追加内容。
  • std::ios::ate: 打开文件后立即定位到文件末尾。
  • std::ios::trunc: 如果文件已存在,则删除其内容。
  • std::ios::binary: 以二进制模式打开文件。

示例:组合模式

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- --------------------- ------------- - --------------- -- ---------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    ---------- -- -------- -- ----------

    -------------------
    ------ --
-

错误处理

文件操作可能由于各种原因失败,因此需要妥善处理错误情况。

检查文件打开状态

可以通过检查文件流的状态标志来判断文件操作是否成功。

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- -------------------------

    -- ------------ -
        --------- -- -------- -- ----------
        ------ --
    -

    ----------- -----
    ----- ------------------- ------ -
        --------- -- ---- -- ----------
    -

    ------------------
    ------ --
-

清除状态标志

在某些情况下,可能需要清除文件流的状态标志,以便继续操作。

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------ ------------------------- ------------ - ---------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    ---------- -- ------- ------- -- ----------

    ------------------- -- ------
    ------------------- --------------- -- -------

    ----------- --------
    ----- -------------------- --------- -
        --------- -- ------- -- ----------
    -

    -------------------
    ------ --
-

文件缓冲

C++ 文件流默认使用缓冲机制,以提高性能。可以手动控制缓冲行为,例如刷新缓冲区。

刷新缓冲区

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- -------------------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    ---------- -- ----- -- ----------
    ------------------- -- -----

    ---------- -- ----- -- ----------

    -------------------
    ------ --
-

禁用缓冲

可以通过设置文件流为无缓冲模式来禁用缓冲。

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    ------------- ------------------------ ------------- - ------------------

    -- ------------- -
        --------- -- -------- -- ----------
        ------ --
    -

    -------------------------------------- --- -- ----

    ---------- -- ----------- -- ----------

    -------------------
    ------ --
-

总结

本章介绍了 C++ 中文件和流的基本概念及操作方法。通过学习这些内容,你将能够有效地处理文件输入输出任务,从而增强你的程序功能。下一部分我们将探讨更高级的文件操作技术,包括内存映射文件和多线程文件访问等主题。

上一篇: C++ 高级教程
下一篇: C++ 异常处理
纠错
反馈