程序运行时产生的数据都属于临时数据,运行结束后都会被释放
通过文件可以将数据持久化
c++对文件操作需包含头文件**<fstream>**
文件类型分两种
1、文本文件:文件以文本的ASCLL码形式存储在计算机中
2、二进制文件:文件以二进制 的形式存储在计算机中,用户一般不能直接读懂它们
操作文件的三大类
<ofstream> : 写操作
<ifstream> : 读操作
<fstream> : 读写操作
文本文件
写文件
写文件步骤如下:
1、包含头文件<fstream>
#include<fstream>
2、创建流对象
ofstream ofs;
3、打开文件
ofs.opfen("打开路径",打开方式);
4、读数据
选择读取方式
5、关闭文件
ofs.close()
注意:文件打开方式可以配合使用,利用 | 操作符
例如:用二进制写文件 ios::binary | ios::out
代码示例:
cpp
void test01() {
//1.包含头文件 fstream
//2.创建流对象 ifstream 读文件 ofstream写文件 fstream读写文件
fstream ofs;
//3.指定打开方式 对象.open("文件路径",打开方式)
ofs.open("test.01", ios::out);
//4.写内容
ofs << "古月阿刘" << endl;
ofs << "资质:" << "甲等9成9真元" << endl;
ofs << ""不过是些许风霜罢了"" << endl;
//5.关闭文件
ofs.clear();
}
int main() {
test01();
}
查看写的文件:
右键咱们的源文件,打开所在文件夹
在源文件的附近就会出现我们打开路径的文件
记事本或者其他方式打开这个文件就可以看到写的东西了
读文件
读文件的操作和写文件很类似
读文件步骤如下:
1、包含头文件<fstream>
#include<fstream>
2、创建流对象
ifstream ifs;
3、打开文件并判断是否打开成功
ifs.opfen("打开路径",打开方式);
4、读数据
选择读取方式
5、关闭文件
ifs.close()
代码示例:
cpp
void test01() {
//1、包含头文件<fstream>
//2、创建流对象
ifstream ifs;
//3、打开文件 并判断是否打开成功
ifs.open("test.01", ios::in);
if (!ifs.is_open()) {//is_open()如果成功打开则返回一个true
cout << "文件打开失败" << endl;
return;
}
//4、读数据
string buf;
//getline是一个全局函数
while (getline(ifs, buf)) {
cout << buf << endl;
}
//5、关闭文件
ifs.close();
}
int main()
{
test01();
}
操作完毕要关闭文件
二进制文件
以二进制的方式操作文件
打开方式指定ios::binary
写文件
二进制写文件主要通过流对象调用成员函数write
函数原型:ostream& write(const char * buffer , int len);
参数解释:字符指针buffer指向一块内存空间进行写的开始,len表示写的字节数
示例:
cpp
//二进制文件(除用内置数据类型外,还可用自定义数据类型)
class person {
public:
char m_Name[64];//不用string,因为底层逻辑是C语言
int m_Age;
};
void test01() {
//1、包含头文件
//2、创建流对象
ofstream ofs("person.txt", ios::out | ios::binary);//存在构造函数
//3、打开文件(二进制方式)
//ofs.open("person.txt", ios::out | ios::binary);
//4、写内容
person per = { "xiaoliu", 19 };
ofs.write((const char*)&per, sizeof(person));
//5、关闭文件
ofs.close();
}
int main()
{
test01();
}
查看写的文件与文本文件的查看一致, 但我们不能直接看懂它,因为是二进制的方式写入。
总结:文件输出流对象,通过函数write,以二进制方式写数据
读文件
二进制读文件主要通过流对象调用成员函数read
函数原型:istream& read(char * buffer , int len);
参数解释:字符指针buffer指向一块内存空间进行读的开始,len表示读的字节数
示例:
cpp
class person {
public:
char m_Name[64];//不用string,因为底层逻辑是C语言
int m_Age;
};
void test01() {
//1、包含头文件
//2、创建流对象
ifstream ifs;
//3、打开文件 判断是否打开成功
ifs.open("person.txt", ios::in | ios::binary);
if (!ifs.is_open()) {
cout << "文件打开失败" << endl;
return;
}
//4、读数据
person p;
ifs.read((char*)&p, sizeof(person));
cout << "姓名:" << p.m_Name << " " << "年龄:" << p.m_Age << endl;
//5、关闭文件
ifs.close();
}
int main()
{
test01();
}