到目前为止,我们已经使用了iostream标准库,它提供了cin和cout方法分别用于从标准输入读取流和向标准输出写入流。
本文介绍如何从文件读取流和向文件写入流。这就需要用到C++中另一个标准库fstream,它定义了三个新的数据类型:
要在C++中进行文件处理,必须在C++源代码文件中包含头文件iostream和fstream。
打开文件在从文件读取信息或者向文件写入信息之前,必须先打开文件。ofstream和fstream对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用ifstream对象。
下面是open()函数的标准语法,open()函数是fstream、ifstream和ofstream对象的一个成员。
voidopen(constchar*filename,ios::openmodemode);
在这里,open()成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。
您可以把以上两种或两种以上的模式结合使用。例如,如果您想要以写入模式打开文件,并希望截断文件,以防文件已存在,那么您可以使用下面的语法:
ofstreamoutfile;outfile.open("file.dat",ios::out
ios::trunc);
类似地,您如果想要打开一个文件用于读写,可以使用下面的语法:
fstreamafile;afile.open("file.dat",ios::out
ios::in);关闭文件
当C++程序终止时,它会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。
下面是close()函数的标准语法,close()函数是fstream、ifstream和ofstream对象的一个成员。
voidclose();写入文件
在C++编程中,我们使用流插入运算符()向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是ofstream或fstream对象,而不是cout对象。
读取文件在C++编程中,我们使用流提取运算符()从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是ifstream或fstream对象,而不是cin对象。
读取写入实例下面的C++程序以读写模式打开一个文件。在向文件afile.dat写入用户输入的信息之后,程序从文件读取信息,并将其输出到屏幕上:
#includefstream#includeiostreamusingnamespacestd;intmain(){chardata[];//以写模式打开文件ofstreamoutfile;outfile.open("afile.dat");cout"Writingtothefile"endl;cout"Enteryourname:";cin.getline(data,);//向文件写入用户输入的数据outfiledataendl;cout"Enteryourage:";cindata;cin.ignore();//再次向文件写入用户输入的数据outfiledataendl;//关闭打开的文件outfile.close();//以读模式打开文件ifstreaminfile;infile.open("afile.dat");cout"Readingfromthefile"endl;infiledata;//在屏幕上写入数据coutdataendl;//再次从文件读取数据,并显示它infiledata;coutdataendl;//关闭打开的文件infile.close();return0;}
当上面的代码被编译和执行时,它会产生下列输入和输出:
$./a.outWritingtothefileEnteryourname:ZaraEnteryourage:9ReadingfromthefileZara9
上面的实例中使用了cin对象的附加函数,比如getline()函数从外部读取一行,ignore()函数会忽略掉之前读语句留下的多余字符。
文件位置指针istream和ostream都提供了用于重新定位文件位置指针的成员函数。这些成员函数包括关于istream的seekg("seekget")和关于ostream的seekp("seekput")。
seekg和seekp的参数通常是一个长整型。第二个参数可以用于指定查找方向。查找方向可以是ios::beg(默认的,从流的开头开始定位),也可以是ios::cur(从流的当前位置开始定位),也可以是ios::end(从流的末尾开始定位)。
文件位置指针是一个整数值,指定了从文件的起始位置到指针所在位置的字节数。下面是关于定位"get"文件位置指针的实例:
//定位到fileObject的第n个字节(假设是ios::beg)fileObject.seekg(n);//把文件的读指针从fileObject当前位置向后移n个字节fileObject.seekg(n,ios::cur);//把文件的读指针从fileObject末尾往回移n个字节fileObject.seekg(n,ios::end);//定位到fileObject的末尾fileObject.seekg(0,ios::end);
—————————————
如果有想学编程的小伙伴,可以来我的编程俱乐部
我的C/C++编程学习交流Q群
预览时标签不可点收录于合集#个上一篇下一篇