fstream的常用用法
### fstream 的常用用法详解 #### 一、概述 `<fstream>` 是 C++ 标准库中的一个文件输入/输出(I/O)库,它提供了许多比 ANSI C 的 `<stdio.h>` 更为强大的功能。`<fstream>` 的优势在于它支持面向对象的接口、国际化和本地化支持、更高的安全性以及易于调试。 #### 二、基本概念 `<fstream>` 库主要包含了三个类:`ifstream`、`ofstream` 和 `fstream`,它们分别用于文件的读取、写入以及同时进行读写操作。这些类继承自 `iostream` 类,因此可以使用与 `iostream` 相同的操作符来进行文件数据的读写。 #### 三、文件流对象创建与打开文件 当创建文件流对象时,可以通过构造函数直接打开一个文件: ```cpp std::ofstream dictionary("myfile.txt"); ``` 或者在创建对象后使用 `open()` 方法打开文件: ```cpp std::ofstream dictionary; dictionary.open("myfile.txt"); dictionary.close(); ``` #### 四、文件打开模式 `<fstream>` 支持多种文件打开模式,这些模式可以通过 `ios` 类型的枚举值来设置。以下是一些常用的文件打开模式: - `ios::app`: 追加模式,在文件末尾追加数据。 - `ios::ate`: 打开文件后将文件指针定位到文件末尾。 - `ios::binary`: 二进制模式,以二进制形式读写文件。 - `ios::in`: 输入模式,用于读取文件。 - `ios::out`: 输出模式,用于写入文件。 - `ios::nocreate`: 如果文件不存在,则不创建新文件。 - `ios::noreplace`: 如果文件已存在,则不覆盖原文件。 - `ios::trunc`: 打开文件时清空文件内容,将其长度设置为 0。 例如,下面的代码展示了如何使用多种模式打开文件: ```cpp std::ofstream logfile("login.dat", ios::binary | ios::app); ``` #### 五、文件位置控制 `<fstream>` 提供了对文件位置进行控制的方法,主要包括 `seekp()` 和 `seekg()` 用于改变文件指针的位置,`tellp()` 和 `tellg()` 用于获取文件指针的当前位置。 ```cpp std::ofstream fout("parts.txt"); fout.seekp(10); // 将文件指针移动到距离文件开头 10 字节的位置 std::cout << "new position: " << fout.tellp() << std::endl; // 显示新的位置 fout.seekp(-3, ios::cur); // 从当前位置向后移动 -3 字节 ``` `seekp()` 和 `seekg()` 的第二个参数可以是 `ios::beg`、`ios::cur` 或者 `ios::end`,分别表示从文件开始、当前位置或文件结束位置计算偏移量。 #### 六、数据读写 `<fstream>` 支持多种类型的数据读写,包括基本类型如 `int`、`float` 等,以及更复杂的数据类型如 `std::string`、`std::complex` 等。使用 `<<` 和 `>>` 操作符进行数据的读写。 ```cpp std::ofstream fout("data.txt"); int num = 10; fout << num; // 写入整数 fout.seekp(0); // 移动文件指针回到文件开头 int readNum; fout >> readNum; // 读取整数 ``` 对于 `std::string` 类型的数据,可以直接使用 `<<` 和 `>>` 进行读写,而不需要像 `<stdio.h>` 那样使用复杂的格式字符串。 #### 七、宽字符支持 虽然 `<fstream>` 默认处理的是 `char` 类型的数据,但它也提供了一定程度的支持来处理宽字符 `wchar_t`。这使得 `<fstream>` 在处理多字节编码时更加灵活,尽管这种支持可能不如 `<stdio.h>` 那样全面,但仍然可以满足大部分需求。 #### 八、总结 `<fstream>` 提供了比 `<stdio.h>` 更加强大且灵活的文件 I/O 功能。通过面向对象的方式,它可以更容易地实现文件的读写、位置控制等操作,并且支持更多的数据类型。此外,`<fstream>` 还提供了更多的文件打开模式选择,使得开发者可以根据实际需求更加灵活地控制文件的读写方式。尽管 `<fstream>` 在某些特定情况下可能不如 `<stdio.h>` 那样高效,但对于大多数日常编程任务而言,`<fstream>` 已经足够强大并且易于使用。
- gg4426394482012-06-23还可以,代码清晰,思路明朗,
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助