C++ ofstream与ifstream详细用法
在C++中,文件I/O主要通过fstream类及其子类ifstream(输入)和ofstream(输出)实现。掌握文件的打开模式、读写方式(文本与二进制)及指针定位是进行底层数据存储的关键。
结果或目标
在使用C++进行文件操作时,需要能够根据需求正确选择流对象类型,以适当的模式打开文件,并安全地完成数据的读写与保存操作。
准备条件
要使用C++的文件流功能,必须包含头文件:#include <fstream>。
系统提供了三个主要类用于文件操作:
ifstream:默认以输入方式(读)打开文件。ofstream:默认以输出方式(写)打开文件。fstream:可同时支持输入和输出操作。
真实操作顺序
第1步:打开文件
目的:建立流对象与磁盘文件的关联。
入口:open()成员函数或类构造函数。
fstream类中有一个open()函数,原型为:void open(const char* filename, int mode, int access);
参数说明:
filename:文件路径(如c:\\config.sys)。mode:打开方式,可在ios基类中定义的标志组合:
ios::in:文件以输入方式打开(读取)。ios::out:文件以输出方式打开(写入)。ios::app:以追加方式打开,所有写入都在文件末尾。ios::ate:打开后立即定位到文件尾(ios::app隐含此属性)。ios::binary:以二进制模式打开,缺省为文本模式。ios::trunc:若文件存在则清空内容(设为0长);若不存在则创建。
多个模式可用
| 连接,例如:file.open("test.txt", ios::out | ios::binary);完成状态:如果成功,流对象状态变为“就绪”;失败时可调用
is_open() 检查。
第2步:读写文本文件
目的:将结构化的字符串或基本数据类型写入文件或从文件读取。
入口:流插入运算符 << 与析取运算符 >>。
写入示例:
ofstream file("output.txt");
file << "Hello World" << endl;
int val = 42;
file << val << " is a value.";
读取示例:
ifstream file("input.txt");
string line;
while (getline(file, line)) {
// 处理每一行
}
格式化控制:可使用操纵符控制输出格式,如 hex(十六进制)、dec(十进制)、oct(八进制)以及 setprecision(n) 控制浮点精度。
第3步:读写二进制文件
目的:高效处理非文本数据块或结构化内存数据。
入口:put()、get()、write() 和 read()。
单字符操作:
file.put('c'):向流写入一个字符。char ch; file.get(ch):从流读取一个字符保存到ch。file.get(str, size, delim):读取指定数量字符直到分隔符。
数据块操作(通常用于结构体或数组):
// 写入
unsigned char buf[] = "Data Block";
ofstream out("data.bin", ios::binary);
out.write(buf, strlen((char*)buf));
// 读取
ifstream in("data.bin", ios::binary);
unsigned char readBuf[10];
in.read(readBuf, sizeof(readBuf));
注意:write 和 read 的参数类型为 unsigned char*,其他类型指针需强制转换。读取实际字节数可通过 in.gcount() 获取。
第4步:定位文件指针
目的:在非顺序访问场景下精确控制读写位置。
入口:seekg()(设置读位置)和 seekp()(设置写位置)。
原型:istream & seekg(streamoff offset, seek_dir origin);ostream & seekp(streamoff offset, seek_dir origin);
基准位置 origin:
ios::beg:文件开头。ios::cur:当前位置。ios::end:文件结尾。
示例:
file.seekg(0, ios::end); // 定位到文件末尾
第5步:关闭文件
目的:释放系统资源并提交缓冲区数据。
操作:调用 file.close();。
注:虽然对象销毁时会自动调用 close,但显式关闭能尽早释放资源并在出错时提前介入。
完成判断
- 文件内容已按预期更新或读取完毕。
- 没有发生因未关闭文件导致的资源泄露或数据丢失。
- 对于二进制操作,确保使用了
ios::binary以避免平台相关的文本转换干扰。
简要总结
C++的文件流机制依赖于 ifstream、ofstream 和 fstream。通过合理组合 ios 标志位可以灵活定义文件行为。文本读写推荐使用流运算符以保持简洁,而二进制数据块处理则应选用 read/write 以提高效率并避免格式解析开销。
以上就是C++ ofstream与ifstream详细用法的详细内容,更多关于C++文件编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













