一、写文件
#include <iostream>
#inlcude <fstream>
void save(int m, vector<vector<int>> ar)
{
ofstream ofs;
if (!ofs.is_open())//文件未打开
{
cerr << "temp.txt" << "file open failed" << endl;
//cerr:输出到标准错误的ostream对象,对应于标准错误流(关联到标准输出设备,通常为显示器),常用于显示程序错误信息;
return;
}
ofs.open("temp.txt", ios::out);//第一个参数为创建或打开文件的地址,第二个参数为操作方式
/*
文件常见的打开方式 :
(1). in 以读的方式打开文件
(2). out 以写的方式打开文件
(3). binary 以二进制方式对文件进行操作
(4). ate 输出位置从文件的末尾开始
(5). app 以追加的方式对文件进行写入
(6). trunc 先将文件内容清空再打开文件
*/
for (size_t i = 0; i < m; i++)
{
//写入文件数据
ofs << ar[i][0] << " " << ar[i][1] << " " << ar[i][2] << endl;
}
ofs.close();
}
二、读文件
void open()
{
vector<vector<int>> ar;
fstream File;
if (!File.is_open())//文件未打开
{
cerr << "temp.txt" << "file open failed" << endl;
return;
}
File.open("temp.txt", ios::in);
int sum = 0;
int a, b, c;
while (File >> a >> b >> c)//读取文件中数据,每次循环读取一行数据直至读取完
{
ar.push_back({ a,b,c });
sum++;
}
File.close();
}
//注:若读取string数据可用stringstream类
//具体用法可参照以下博客
//原文链接:https://blog.csdn.net/weixin_45867382/article/details/122109133
具体IO细节可以参考以下博客
原文链接:https://blog.csdn.net/DR5200/article/details/118073923
补充:
上述读取文件的操作对于文件中的空行无法进行跳跃,可能会报错
以下为可以跳过空行的代码
void open()
{
vector<vector<int>> ar;
fstream File;
if (!File.is_open())//文件未打开
{
cerr << "temp.txt" << "file open failed" << endl;
return;
}
File.open("temp.txt", ios::in);
int sum = 0;
int a, b, c;
while (!File.eof())
{
char data[1024];
File.getline(data, 1024);//将一行数据存入data中
//跳过空行
if (strlen(data) == 0)
break;
stringstream ss(data);
ss >> a >> b >> c;
ar.push_back({ a,b,c });
sum++;
}
File.close();
}