打开一个文件,需要打开与文件相关联的流
ifstream---用于文件的istream流(读取文件)
ofstream---用于文件的ostream的流(写文件)
fstream---用于文件的iostream(既可以写也可以读) 文件流必须与某个文件相关联,然后才可以使用
打开一个文件
cout << "please enter input file name !" << endl;
string name;
cin>>name;
ifstream ist(name.c_str());//函数c_str()是string类的一个成员函数,将string对象转换为更为底层的C风格字符串, if(!ist) cout<<"can;t open input file"<<endl;
写文件,通过流来实现:
cout<<"please enter name of output file:";
string oname;
cin>>oname;
ofstream ost(oname.c_str());
if(!ost) cout<<"can;t output file"<<endl;
还可通过open()和close()操作显示的打开和关闭文件
如何从一个文件中读取一些实验结果,并将其描述为内存数据对象?
11.txt里面:
0 60.7
1 60.6
2 60.3
3 59.22
。。。
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Reading{
Reading(int hh,double tt):hour(hh),temperature(tt){}
double temperature;
int hour;
};
void error(string str){
cout<<str<<endl;
}
int main()
{
//读11.txt文件,打开11.txt文件,通过流对象,ist是流对象
cout << "please enter input file name !" << endl;
string name;
cin>>name;
ifstream ist(name.c_str());//函数c_str()是string类的一个成员函数,将string对象转换为更为底层的C风格字符串, if(!ist) cout<<"can;t open input file"<<endl;
if(!ist) error("can't output file");
//写入12.txt文件,也是要先打开12.txt文件,通过流对象,ist是流对象
cout<<"please enter name of output file:";
string oname;
cin>>oname;
ofstream ost(oname.c_str());
if(!ost) error("can't output file");
//读取11.txt文件里的内容通过输入流对象,放入到temps向量中
vector<Reading> temps;
int hour;
double temperature;
while(ist>>hour>>temperature){
if(hour<0||20<hour){
error("hour out of range");
}
cout<<"hour:"<<hour<<",temperature:"<<temperature<<endl;
temps.push_back(Reading(hour,temperature));
cout<<"~~"<<endl;
}
//将temp中的内容写入输出流对象中
for(int i=0;i<temps.size();++i)
{
ost<<'('<<temps[i].hour<<','<<temps[i].temperature<<')'<<endl;
}
return 0;
}
处理错误:如何使用流状态的例子