文件应用场景:
程序数据属于临时数据,程序一旦运行结束都会被释放。而通过文件可以实现数据持久化,将数据保留下来。
文件类型分为两种:文本文件(ascii码存储)和二进制文件(二进制存储)。
而操作文件分三种:
ostream | 写操作 |
istream | 读操作 |
fstream | 读写操作 |
文件操作步骤:
写文件示例(读文件是ifs)
1.预设头文件:include<fstream>
2.创建流对象:ofstream ofs;
3.(进入)打开文件:ofs.open("文件路径",“打开方式”);
4.操作文件数据:ofs<<"写点什么呢?"<<endl ;
5.关闭文件:ofs.close() ;
PS:
读文件失败时可以加个判断语句IF(!ifs.is_open())
读文件四种方式:while配合字符数组;配合getline;string;char配合get()
流对象和打开文件可以同时初始化
关于文件操作的打开方式:
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios:ate | 使初始位置在文件尾 |
ios::app | 追加方式写文件 |
ios::binary | 二进制方式 |
ios:trunc | 如果文件存在,就先删除再创建 |
当然,打开方式可以混合使用,配合“|” 或 运算符。
二进制文件
文件输出流对象,通过write函数以二进制方式写数据,通过read函数以二进制方式读数据。
class Person{
public:
char name[64];
int age;
};
这个类作为我们操作文件的媒介。
ofstream ofs;
ofs.open("person.txt",ios::binary|ios::out);
Person p={"张三",18};
ofs.write((const char*)&p,sizeof(p)) ;
ofs.close();
写文件↑
ifstream ifs;
ifs.open("person.txt",ios::in|ios::binary);
if(!ifs.is_open()){
cout<<"文件打开失败"<<endl;
}
Person p;
ifs.read((char*)&p,sizeof(p));
cout<<p.name<<endl<<p.age<<endl;
ifs.close();
读文件↑