程序的运行产生的数据都是临时数据,不能持久的保存,一旦程序运行结束数据就会被释放。
在C++中对文件进行操作必须包含头文件<fstream>;
对文件操作的类
- fstream:可读可写操作
- ifstream:只能读操作
- ofstream:只能写操作
#include<iostream>
#include<fstream>//包含头文件
using namespace std;
int main()
{
ofstream ofs;//创建流对象 ->往文件里写
ofs.open("123.txt");//打开文件123.txt如果没有会自动创建,
ofs << "我们可以写入文件了!";
ofs.close();//关闭文件
return 0;
}
![](https://img-blog.csdnimg.cn/2cd46e64d54a49a0b7bb5b1538444e8c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yR5oul5a2k54usIOW_g-aciemYs-WFiQ==,size_19,color_FFFFFF,t_70,g_se,x_16)
文件ofs.open("123.txt",打开方式)
文件的打开方式
- ios::in 为读文件打开方式
- ios::out 为写文件打开方式
- ios::ate 初始位置文件尾
- ios::app 写文件尾追加
- ios::trunc 若文件存在先删除,在创建
- ios::binary 二进制方式打开
#include<iostream>
#include<fstream>//包含头文件
using namespace std;
int main()
{
ofstream ofs;//创建流对象 ->往文件里写
ofs.open("123.txt",ios::app);//打开文件123.txt如果没有会自动创建,
ofs << "我们可以写入文件了!";
ofs << "啊哈!我又写了一行";//这行会追加在上一行后面
ofs.close();//关闭文件
return 0;
}
![](https://img-blog.csdnimg.cn/e6f02e010dd34b088f7f25d2aa64a26f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yR5oul5a2k54usIOW_g-aciemYs-WFiQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
我们将文件中写好的数据读出
第一种读法
#include<iostream>
#include<fstream>//包含头文件
using namespace std;
int main()
{
ifstream ifs("123.txt", ios::in);//创建流对象并按指定方式打开;ifstream ifs;ifs.open("123.txt",ios::in)等价
if (!ifs.is_open())
{
cout << "文件不存在" << endl;
}
char arr[1024] = { 0 };
while (ifs >> arr)
{
cout << arr << endl;
}
ifs.close();
return 0;
}
![](https://img-blog.csdnimg.cn/cae096fd8f8c46b8bb081845137d0005.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yR5oul5a2k54usIOW_g-aciemYs-WFiQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
第二种读法
#include<iostream>
#include<fstream>//包含头文件
using namespace std;
int main()
{
ifstream ifs("123.txt", ios::in);
if (!ifs.is_open())
{
cout << "文件不存在" << endl;
}
char arr[1024] = { 0 };
while (ifs.getline(arr, sizeof(arr)))//按行读取
{
cout << arr << endl;
}
ifs.close();
return 0;
}
![](https://img-blog.csdnimg.cn/cae096fd8f8c46b8bb081845137d0005.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yR5oul5a2k54usIOW_g-aciemYs-WFiQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
第三种字符串读取
#include<iostream>
#include<string>
#include<fstream>//包含头文件
using namespace std;
int main()
{
ifstream ifs("123.txt", ios::in);
if (!ifs.is_open())
{
cout << "文件不存在" << endl;
}
string arr;
while (getline(ifs, arr))
{
cout << arr << endl;
}
ifs.close();
return 0;
}
![](https://img-blog.csdnimg.cn/cae096fd8f8c46b8bb081845137d0005.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yR5oul5a2k54usIOW_g-aciemYs-WFiQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
二进制读写 文件
- read()它属于ifs的成员函数,读取时需要调用
- write()它属于ofs的成员函数,写入时需要调用
#include<iostream>
#include<string>
#include<fstream>//包含头文件
using namespace std;
struct student
{
string name;
int age;
};
int main()
{
ofstream ofs("12.txt", ios::out | ios::binary);
student one = { "小明",12 };
ofs.write((const char*)&one,sizeof(one));//我先将小明信息存入并关闭文件
ofs.close();
ifstream ifs("12.txt", ios::in | ios::binary);//我打开文件进行读取
if (!ifs.is_open())
{
cout << "文件不存在" << endl;
}
ifs.read(( char*)&one, sizeof(one));
cout <<"姓名:"<< one.name <<"年龄:"<< one.age << endl;
ifs.close();
return 0;
}
![](https://img-blog.csdnimg.cn/83abb24cb03441638aceb0997ea85828.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56yR5oul5a2k54usIOW_g-aciemYs-WFiQ==,size_10,color_FFFFFF,t_70,g_se,x_16)