在《数据结构与算法分析 C++描述》一书中,写到:
对文件I/O来说,如果一个程序要从一个文件中获取输入或要输出到一个文件中,它必须为此目的创建一个流。
这个操作被称为打开一个到文件的流。
一个要读取某个文件的程序必须打开到这个文件的ifstream,而一个要写某个文件的程序必须打开到这个文件的ofstream。
fstream既可以用于从文件中读取,也可以用于向文件中写入。需要加入fstream库声明。
fstream inoutStream
inoutStream.open(ioFileName.data(), ios::in | ios::out); // 既可以用于输入,也可以用于输出
open()具有破坏性,使用iso::app可以保留输出文本内容,并且以追加的形式放到文件末尾。如:
outstream.open(outFileName.data(), ios::app);
#inlcude<iostream> // cin, cout #include <fstream> // ifstream ,ofstream #include<string> // string ,getline() #include<cassert> // assert() using namespace std; int main(){ cout << "Enter the name of the input file: "; string inputFileName; getline(cin, inputFileName); // 获取输入文件的名字 ifstream fin; // 打开一个到输入文件 fin.open(inputFileName.data()); // 的输入 流,建立相关 assert( fin.is_open()); // 联系并检查是否成功 // 要记住:无论何时都要记住使用is_open()来检测一个打开流的尝试是否成功。 true / false; // 文件流使得这个对象成为一个程序和文件之间的联系。 for(;;) // 循环 { fin >> $$$$$$$$; // 读取内容 if(fin.eof()) break; // 如果eof, end of file 则推出 } // 循环结束 fin.close(); // 关闭联系,断开文件流到文件的联系 return 0; }完整示例文件:
#include<iostream> // cin, cout #include<fstream> // ifstream ,ofstream #include<string> // file name #include<cassert> // assert using namespace std; int main(){ // 文件输入: cout<< "Enter file name: "; stringfileName; getline(cin, fileName); ifstream fin; // fine input stream fin.open(fileName.data()); // If the stream is already associated with a file assert(fin.is_open()); // (i.e., it is already open), calling this function fails. cout<< "file is open"; string content; while(!fin.eof()){ fin>>content; cout<<content<<"\n"; } fin.close(); // 文件输出: cout<< "Enter file name: "; stringofileName; getline(cin, ofileName); ofstreamfout; fout.open(ofileName.data()); assert(fout.is_open()); cout<< "file is open\n"; string content1; while(true){ getline(cin,content1,'\n'); if(content1[0]!= ' ') // 当读入的首个字符为空格时,停止输入 fout<< content1<<"\n"; else break; } // fout<< "test ....\n" ; // 也可以使用硬编码的方式,多次使用fout输出到文件 // fout<< "test ...." ; // fout<< "test ...." ; fout.close(); return 0; }