当要读写一个文件时,可以使用fstream流,该流可以对指定文件进行读写操作。fstream流在fstream头文件中定义,该头文件中还定义了另外两个类型ifstream和ofstream,其中ifstream用来对指定文件进行读操作,而ofstream对指定文件进行写操作。以上三个类的操作与iostream类的操作类似,可以使用<<和>>等IO运算符。fstream流、ifstream流和ofstream流的使用方法基本相同。
1 定义文件流的对象
在定义文件流的对象时,可以指定文件也可以不指定文件。
1.1在定义对象时指定文件
在定义对象时指定文件,即创建对象的同时,打开指定文件,并将流对象与文件关联。
explicit basic_fstream( const char* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out, int _Prot = (int)ios_base::_Openprot);
其中,参数_Filename表示指定的文件;_Mode表示访问文件的权限,默认权限是读(ios_base::in)权限和写权限(ios_base::out);int_Prot指定了文件在打开是的共享方式,即当某个用户打开该文件后,其他用户能否对该文件进行读写操作。
ifstream infile("text.txt");
其中,定义了一个ifstream流的对象infile,用于读取指定文件text.txt的内容。
1.2 在定义对象时不指定文件
在定义对象时不指定文件,则需要在定义之后,调用open()函数打开指定文件,并将流对象与文件关联。
ofstream outfile;
outfile.open("text.txt");
其中,定义了一个ofstream流的对象outfile,用于向文件中写入数据。之后使用open()函数打开指定的文件text.txt,并将outfile与该文件关联。
open()函数的作用是打开指定的文件,其格式为
void open( const char* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out, int _Prot = (int)ios_base::_Openprot);
该函数的参数与“1.1在定义对象时指定文件”中提到的流的构造方法相同。
2 读取文件内容
通过“1.1在定义对象时指定文件”中定义的ifstream流的对象infile读取text.txt文件中的内容。
string s;
infile >> s;
cout << s;
infile.close();
其中,通过IO操作符>>将文件中的内容保存到string类的对象s中,并通过cout在控制台中显示出读取到的内容。读取了数值之后,需要调用close()函数将流关闭,即断开流与指定文件的关联,这样才能对指定文件进行后续的写操作。
3 向文件中写入数据
通过在“1.2 在定义对象时不指定文件”中定义的ofstream类的对象outfile,向text.txt中写入数据。
outfile << "hello world";
outfile.close();
其中,通过IO操作符<<将数据写入到text.txt中,并调用close()函数关闭流与文件的连接。