1、概述
我们知道,程序在运行时会产生一些临时数据,而这些数据会随着程序运行结束被释放,不能持久的保存下来,不便于后期查看,在C++中可以通过文件来实现数据持久化。
C++中对文件的操作需要包含头文件:
<ofstream>写操作,<ifstream>读操作,<fstream>读写操作
文件类型分为两种:
- 文本文件:文件以文本的ASCLL码的形式存储在计算机中
- 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
文件打开方式:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾部 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注:文件打开方式可以配合使用,利用|操作符,如用二进制方式写文件 ios::binary | ios:: out
2、文本文件
2.1 写文件
写文件步骤如下:
step1:包含头文件 include <fstream>
step2:创建流对象 ofstream ofs;
step3:打开文件 ofs.open("文件路径",打开方式);
step4:写数据 ofs << "写入的数据";
step5:关闭文件 ofs.close();
代码示例如下:
#include <fstream>
void test01()
{
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "姓名:张三" << endl;
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
2.2 读文件
读文件步骤如下:
step1: 包含头文件 include <fstream>
step2: 创建流对象 ifstream ifs;
step3: 打开并判断是否打开成功 ifs.open("文件路径",打开方式);
step4: 读数据 四种方式读取
step5: 关闭文件 ifs.close();
代码示例如下:
#include <fstream>
void test01()
{
ifstream ifs;
ifs.open("test.txt", ios::in);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
//第一种方式
/*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;
}*/
//第四种方式
char c;
while ((c = ifs.get()) != EOF)
{ cout << c;}
ifs.close();
}
int main() {
test01();
system("pause");
return 0;
}
3、二进制文件
以二进制的方式对文件进行读写操作时,打开方式要指定为 ios::binary
3.1 写文件
二进制方式写文件主要利用流对象调用成员函数write
函数原型 :ostream& write(const char * buffer,int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
代码示例如下:
#include <fstream>
class Person
{
public:
char m_Name[64];
int m_Age;
};
//二进制文件 写文件
void test01()
{
ofstream ofs("person.txt", ios::out | ios::binary);//创建流对象,并打开文件
//ofs.open("person.txt", ios::out | ios::binary);
Person p = { "张三" , 18 };//写文件
ofs.write((const char*)&p, sizeof(p));
ofs.close();//关闭文件
}
int main() {
test01();
system("pause");
return 0;
}
3.2 读文件
二进制方式读文件主要利用流对象调用成员函数read
函数原型:istream& read(char *buffer,int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
代码示例如下:
#include <fstream>
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
ifstream ifs("person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
}
Person p;
ifs.read((char*)&p, sizeof(p));
cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}
int main() {
test01();
system("pause");
return 0;
}
注:如有不恰当的部分,欢迎指正!