文件流
2023年12月21日 2023年12月21日
file stream
定义了读写命名文件的基本类型
处理命名文件IO
头文件
1#include <fstream>
文件流
- | ||
---|---|---|
只读 | ifstream | 继承自istream |
只写 | ofstream | 继承自ostream |
可读写 | fstream | 继承自iostream |
创建文件流
默认初始化文件,之后打开
1fstream fstrm; // 创建一个未绑定的文件流 2 3fstrm.open(s); // 打开名为s的文件, 将文件与fstrm绑定. 返回void 4fstrm.close(); // 关闭与fstrm绑定的文件. 返回void 5 6fstrm.is_open(); // 返回bool值,判断文件是否成功打开且未关闭
给出文件名,创建对象的同时尝试打开文件
创建一个fstream,打开名为s的文件
s为string对象,支持一次转换(C风格字符串)
显式构造函数,不支持隐式转换,即不支持字符串转fstream对象
1fstream fstrm(s);
文件模式
file mode
ifstream
- | |
---|---|
in | 只读 |
默认in
ofstream
- | |
---|---|
out | 只写 |
trunc | 清空内容, 从头开始写入 |
app | 以追加方式写入 |
默认out + trunc
fstream
- | |
---|---|
in | 可读 |
out | 可写, 默认trunc |
trunc | 清空内容, 从头开始写入; 要求指定out |
app | 隐式指定out, 以追加方式写入; 要求未指定trunc append |
默认in + out
以指定模式打开文件
1fstream fstrm(s, mode); // 按指定mode打开
1ofstream out("file1"); 2ofstream out2("file1", ofstream::out); 3ofstream out3("file1", ofstream::out | ofstream::trunc); 4 5// 以上均打开文件,清空内容 6 7ofstream app("file2", ofstream::app); 8ofstream app2("file2", ofstream::out | ofstream::app); 9 10// 以上均打开文件,在文件末尾追加
打开文件操作
打开文件失败,failbit置位
已经打开的文件无法再次打开
打开成功,执行good操作返回true
如果以默认方式打开ofstream,文件内容被丢弃
1open(str);
1ifstream in(ifile); 2ofstream out; 3 4out.open(ifile + ".copy"); 5// out.open(ifile + ".copy", ofstream::app); 6 7// 写时,没有该文件则创建 8if (out.fail()) 9 cout << "open fail" << endl; 10 11in.close(); 12in.open(ifile + "2"); 13 14// 读时,没有该文件不会创建,报错 15if (in.fail()) 16 cout << "open fail2" << endl;
关闭文件操作
fstream对象被销毁时,自动对其调用close
1fs.close();