程序运行时产生的数据都属于临时数据,程序一旦运行结束会被释放
通过文件可以将数据持久化
C++中对文件操作需要包含头文件< fstream >
文件类型分为两种:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在,先删除再创建 |
ios::binary | 二进制方式 |
注意:文件打开方式可以配合使用,利用|操作符
使用ifs.is_open()或ifs.failed()
第一种
char buf[1024] = {0}; while(ifs>>buf) { cout<<buf<<endl; }
第二种
char buf[1024] = {0}; while(ifs.getline(buf,sizeof(buf))) { cout<<buf<<endl; }
第三种
string buf; while(getline(ifs,buf)) { cout<<buf<<endl; }
打开方式为ios::binary
二进制方式写文件主要利用流对象调用成员函数write
函数原型 ostream& write(const char * buffer,int len);
参数解释:字符指针buffer指向内存中一段地址空间,len是读写的字节数
二进制方式读取文件主要利用流对象调用成员函数read
函数原型 istream& read(char *buffer,int len);
参数解释:字符指针buffer指向内存中一段地址空间,len是读写的字节数
class person { public: int age; char name[64]; person(const char name[], int age) { strcpy_s(this->name, name); this->age = age; } person() { } }; ostream& operator<<(ostream& cout, person& p) { cout << p.name << " " << p.age; return cout; } int main() { person p1("Mike", 18); ofstream ofs("1.txt", ios::out | ios::binary); ofs.write((const char*)&p1, sizeof(person)); ofs.close(); ifstream ifs("1.txt", ios::in | ios::binary); if (!ifs.is_open()) { cout << "文件读取失败" << endl; return 0; } person p; ifs.read((char*)&p, sizeof(person)); cout << p << endl; ifs.close(); return 0; }