一、文件流
C++的IO类中定义了三个文件读写流fstream、ifstream以及ofstream,它们都继承于相同的父类istream,通过不同的实现以实现不同的文件流操作。
三者的区别为:
- ifstream:从文件读取数据
- ofstream:从文件写入数据
- fstream:既可以读数据、又可以写数据
1.1 IO接口和读写模式
三个文件流实现了以下几个函数接口:
函数名 | 用途 |
---|---|
open(s, mode) | 以mode模式打开文件s |
close() | 关闭文件流 |
is_open() | 返回文件是否已经打开 |
read(buff, size) | 读入最多size字节数据到buff中 |
write(buff, size) | 写入size字节数据到文件中 |
在使用open的时候,可以只传入文件s,不指定打开模式。如果不指定模式,系统会自动根据文件类型选择默认的打开模式。同时,除了open()的方式打开文件以外,还可以在对象构造的时候打开文件:
1 |
ofstream output("/tmp/test.txt", ios::out); |
ios::out
表示已只读方式打开文件,对应unix c中的O_WRONLY模式。在C++中,有以下读写模式可以选择:
模式 | 说明 |
---|---|
ios::in | 以读方式打开 |
ios::out | 以写方式打开 |
ios::app | 以追加写方式打开 |
ios::trunc | 以截断方式打开文件 |
ios:binary | 以二进制方式打开文件 |
ios::ate | 打开文件后指针定位到文件尾 |
这些模式可以单独使用,也可以组合使用,如果需要组合使用,使用逻辑操作符|
或起来即可。这里要特别注意的是ios::out
模式默认会截断文件,也就是说,ios::out
和ios::out | ios::trunc
效果是一样的,都会将文件截断。如果不希望以截断方式打开文件时,则需要设置读写模式为ios::out | ios::app
,以这种模式打开文件后,数据会以追加的方式写入到文件。
1.2 读写文件示例
写文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 写文件 void write_file() { ofstream output; // 待写入数据 string output_data = "HelloWorld\nWelcome To Tencent\n"; // 打开文件 output.open("test.txt", ios::out); |
评论