ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

2023.12.26 c++文件读写操作 fileoption

2026/9/13 5:40:07 拓冰建站 浏览量
2023.12.26 c++文件读写操作 fileoption

fstream提供了三个类,用来实现c++对文件的操作(文件的创建、读、写)

     ifstream -- 从已有的文件读入ofstream -- 向文件写内容fstream - 打开文件供读写

文件打开模式:

 ios::in             只读ios::out            只写ios::app            从文件末尾开始写,防止丢失文件中原来就有的内容ios::binary         二进制模式ios::nocreate       打开一个文件时,如果文件不存在,不创建文件ios::noreplace      打开一个文件时,如果文件不存在,创建该文件ios::trunc          打开一个文件,然后清空内容ios::ate            打开一个文件时,将位置移动到文件尾

文件指针位置在c++中的用法:

 ios::beg   文件头ios::end   文件尾ios::cur   当前位置

常用的错误判断方法:

good()   如果文件打开成功bad()   打开文件时发生错误eof()    到达文件尾

文件写入

//用来测试文件的读写操作,输入输出文件均为保存在程序根目录下的txt文件
void traj_out(const char* path,vector<vector<double>> &out_vector, int dof)
{// cout<<"******************************************"<<endl;cout<<"存储文件 -->"<<path << endl;ofstream	outfile;//outfile也是一个文件流,用来操作输出文件outfile.open(path,ios::trunc);  //打开输出文件for (vector<double>::size_type i=0;i!=(out_vector.size());i++){for(int j=0;j<dof;j++){outfile<< out_vector[i][j] << " " ;}outfile <<endl;}outfile.close();		//关闭输出文件
}

文件读取

//用来测试文件的读写操作,输入输出文件均为保存在程序根目录下的txt文件
vector<vector<double>> traj_in(string *path, int dof)
{ifstream	infile;	//infile是一个文件流,因此其实还是对流进行的操作vector<vector<double>> data_vector;	//用来保存文本中数据的向量infile.open(*path);  //打开输出文件string indata;double  temp;if(!infile)     //判断是否存在ifstream infile{cout<<"读入文件 : " << *path << " 不存在"<<endl;}if (infile.is_open())   //判断文件流是否处于打开状态{int line = 1;while (infile.good()&&!infile.eof()){vector<double> group;
//            cout << " line : " << line << endl;for(int i =0;i<dof;i++){if(infile.good()&&!infile.eof()){infile>>indata;istringstream strstream(indata);strstream>>temp;
//                    cout << temp <<endl;}else{
//                    cout<<"read file finished " << endl;break;}group.push_back(temp);}line = line+1;if(group.size()==dof){data_vector.push_back(group);//将数据读入到data_vector}else break;}}infile.close();cout <<  " 读取完成。 size : " <<   data_vector.size()  << endl;return data_vector;
}