通过文件可以将数据持久化
C++对文件操作需要头文件<fstream>
文件类型有两种:
1.文本文件:文件以文本的ASCII码形式存储在计算机中
2.二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂
操作文件的三大类:
1.ofstream:写操作
2.ifstream:读操作
3.fstream:读写操作
写文件:
#include <fstream>
ofstream ofs;//创建流对象
ofs.open(“文件路径”,打开方式);
ofs<<" ddd";
ofs.close();
打开方式
为读文件打开 ios::in
为写文件打开 ios::out
初始位置:文件尾 ios::ate
追加方式写文件 ios::app
如果文件存在先删除再创建 ios::trunc
二进制方式 ios::binary
打开方式可以配合使用,比如用二进制方式写文件:ios::binary | ios::out
读文件:
#include <fstream>
ifstream ifs;
ifs.open(“文件路径”,打开方式);
ifs.is_open()//判断是否打开成功,成功返回1,失败返回0
四种方式读取
1:
char buf[1024]={0};
while(ifs>>buf)
{ cout<<buf<<endl; }
2:
char buf[1024]={0};
while(ifs.getline(buf,sizeof(buf)))
{ cout<<buf<<endl; }
3:
string buf;
while(getline(ifs,buf))
{cout<<buf<<endl;}
4:不推荐
char c;
while( (c=ifs.get()) !=EOF)
{ cout <<c;}
ifs.close();
用二进制方式对文件进行读写操作
打开方式要指定ios::binary
二进制方式写文件主要利用流对象调用成员函数write
ostream& write(const char* buffer,int len);//buffer是指向内存中一段存储空间,len是读写的字节数
可以操作自定义数据类型
class person
{
C++string会出现问题
用字符数组
public:
char name[64];
int age;
}
void test01()
{
ostream ofs;
ofs.open("person.txt", ios::out | ios::binary);
person p={"张三", 18};
ofs.write( (const char *)&p,sizeof(person) );
ofs.close();
}
二进制方式读文件利用流对象调用成员函数read
public:
char name[64];
int age;
}
void test01()
{
ifstream ifs;
ifs.open("person.txt", ios::in | ios::binary);
ifs.is_open();
person p;
ifs.read( (char *)&p,sizeof(person) );
cout<<p.name<<p.age<<endl;
ifs.close();
}