程序运行时产生的数据都属于临时数据,程序运行结束后会被释放
通过文件可以将数据持久化(可以解决之前通讯录案例的保存问题)
C++中对文件操作需要包含头文件< fstream >
文件类型分为两种:
1、文件文件-文件以文本的ASCII码储存在计算机中
2、二进制文件-文件以文本的二进制心事储存在计算机中
操作文件的三大类:
1、ofstream:写操作
2、ifstream:读操作
3、fstream:读写操作
写文件:
#include<iostream>
using namespace std;
#include <fstream>//包含头文件
//文本文件 写文件
void test1()
{
//1、包含头文件fstream
//2、创建流对象
ofstream ofs;//命名为ofs的流对象
//3、指定打开方式
ofs.open("test.txt", ios::out);//指定写文件的打开方式
//4、写内容
ofs << "姓名:张三" << endl;
//5、关闭文件
ofs.close();
}
int main() {
test1();//执行文件
system("pause");
return 0;
}
读文件:
#include<iostream>
using namespace std;
#include <fstream>//包含头文件
#include <string>//使用getline需要加string的头文件
//文本文件 读文件
void test1()
{
//1、包含头文件fstream
//2、创建流对象
ifstream ifs;//命名为ifs的流对象
//3、指定打开方式,并判断是否打开成功
ifs.open("test.txt", ios::in);//指定写文件的打开方式
if (!ifs.is_open())//判断是否打开成功,如果不成功说明打开失败
{
cout << "文件打开失败" << endl;
return;
}
//4、读数据
//第一种
//char buf[1024] = { 0 };//创建buf数组存放ifs中的数据
//while (ifs>>buf)//通过while的循环将ifs的数据放入buf中,当ifs中没有数据时会自动停止循环
//{
// cout << buf << endl;
//}
第二种
//char buf[1024] = { 0 };
//while (ifs.getline(buf, sizeof(buf)))//ifstream中自带getline的函数,输入需要储存的数组名和数组长度,可以获取数据
//{
// cout << buf << endl;
//}
//第三种
string buf;
while ( getline(ifs, buf))
{
cout << buf << endl;
}
//第四种
char c;
while ((c = ifs.get()) != EOF)//EOF为end of file
{
cout << c;
}
//5、关闭文件
ifs.close();
}
int main() {
test1();//执行文件
system("pause");
return 0;
}
二进制写文件
#include<iostream>
using namespace std;
#include<fstream>
class person
{
public:
char m_name[64];
int m_age;
};
void test1()
{
//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() {
test1();
system("pause");
return 0;
}
二进制读文件
#include<iostream>
using namespace std;
#include<fstream>
//二进制文件 写文件
class person
{
public:
char m_name[64];//最好使用char而不是string
int m_age;
};
void test1()
{
//1、包含头文件
//2、创建流对象
ofstream ofs("person.txt", ios::out | ios::binary);
//3、打开文件
//ofs.open("person.test", ios::out | ios::binary);
//4、写文件
person p = { "张三",18 };
ofs.write((const char*)&p,sizeof(person));//其中的(const char*)&p意思是将p的引用转化为char类型的常量指针
//5、关闭文件
ofs.close();
}
int main() {
test1();
system("pause");
return 0;
}