C++ IO类(3) 文件流

来源:互联网 发布:网络优化工程师待遇 编辑:程序博客网 时间:2024/06/15 05:56
我们可以通过文件流来控制文件的输入以及输出:
fstream: 创建一个未绑定的文件流
fstream fstrm("file.txt")  创建一个fstream,并打开名为s的文件 可以是字符串或指针, 可以设置打开的mode

文件流名.open("file.txt") 打开名未file.txt的文件,并将文件与fstrm绑定
文件流名.close(); 关闭指定文件

fstrm.is_open();   //bool 类型 观察文件是否打开

假设我们要读取一个文件中的内容,并将文件中的内容输出到另一个文件中
具体操作如下:
首先我们创建两个流,一个输入流和一个输出流:
ifstream input("myFileText.txt");    //创建一个输入流并绑定一个指定文件,输入流将从这个文件中读取数据 ofstream output("myResultFile.txt");  //创建一个输出流并绑定一个指定文件,流中的数据将输出到这个文件


将流与文件绑定后,我们就需要一个中介来接收读入的数据和输出数据
string total;

注意:FSTREAM类型可以同时作输入流和输出流
fstream fileStream;  //fstream可以同时适用istream和ostream

我们需要一个读取函数来把文件中读取的内容输入到字符串中:
istream& read(istream& is, string& item) {is >> item;     return is;}

同时还需要一个输出函数把字符串中的内容逐行输出到文件中:
ostream& Print(ostream& os, const string& item) {os << item << endl;return os;}

然后逐行把字符串中的内容读取到文件中:
if (input.is_open()) {   //判断是否成功打开while (read(input, total)) {cout << total << endl;    //在控制台中输出结果Print(output, total);     //将结果写入到未}}elsecout << "open error" << endl;  

最后切记要把流给关闭:
//如果流要关联另外文件,必须先关闭当前文件input.close();output.close();

补充:文件可以设置追加模式,如追加写模式(ostream::app)设置在open的后面
//追加写入模式fstream myNewFile;myNewFile.open("myFileText.txt",ostream::app);   //app每次写前都定位到文件末尾for (int i = 0; i < 100; ++i) {char word = 'a';myNewFile << word;}



整个程序如下:
#include<iostream>#include<fstream>#include<sstream>using namespace std;istream& read(istream& is, string& item);ostream& Print(ostream& os, const string& item);int main() {//fstream fstrm;   //创建一个未绑定的文件流//fstream fstrm("file.txt");  //创建一个fstream,并打开名为s的文件 可以是字符串或指针 可以按mode的指定方式打开文件//fstrm.open("file.txt");  //打开名为s的文件,并将文件与fstrm绑定//fstrm.close();   //关闭指定文件//fstrm.is_open();  //bool类型 观察是否打开ifstream input("myFileText.txt");    //创建一个输入流并绑定一个指定文件,输入流将从这个文件中读取数据 ofstream output("myResultFile.txt");  //创建一个输出流并绑定一个指定文件,流中的数据将输出到这个文件string total;fstream fileStream;  //fstream可以同时适用istream和ostreamfileStream.open("myFileText.txt");  //如果open成功,则open会设置流的状态,使得good()为trueif (input.is_open()) {   //判断是否成功打开while (read(input, total)) {cout << total << endl;    //在控制台中输出结果Print(output, total);     //将结果写入到未}}elsecout << "open error" << endl;  //如果流要关联另外文件,必须先关闭当前文件input.close();output.close();system("PAUSE");return 0;}istream& read(istream& is, string& item) {is >> item;     return is;}ostream& Print(ostream& os, const string& item) {os << item << endl;return os;}



























原创粉丝点击