首页 > 代码库 > 第七篇:两个经典的文件IO程序示例

第七篇:两个经典的文件IO程序示例

前言

       本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅。

程序功能

  程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据。

程序一代码及其注释

 1 #include <iostream> 2 #include <fstream> // 使用文件处理对象记着要包含这个头文件 3 #include <string> 4 #include <vector> 5   6 using namespace std; 7   8 int main() 9 {10     /*11      * 获取用户需要打开的所有文件名,将其保存在顺序容器files中。12     */13     string filename;14     vector<string> files;15     cout << "请输入要处理的文本文件名( ctrl+d结束 ):" << endl;16     while (cin >> filename) {17         files.push_back(filename);18         cout << "请输入要处理的文本文件名( ctrl+d结束 ):" << endl;19     }20     cout << endl << "文件名录入完毕..." << endl << endl;21 22     /*23      * 遍历文件名,并输出各个文件。24     */25     // 创建一个流对象 26     fstream io;    27     for (vector<string>::iterator it = files.begin(); it != files.end(); it++) {28         // 打开文件29         io.open(it->c_str());30         // 打开文件失败的异常处理31         if (!io) {32             cout << "文件 " << it->c_str() << " 打开失败!" << endl;33             continue;34         }35         /*36          * 打印文件内容37         */38         cout << "文件: " << it->c_str() << endl;39         string s;40         while (getline(io, s))41             cout << s << endl;42         cout << endl << "文件" << it->c_str() << "读取完毕" << endl << endl << endl;43         // 重置流前要先关闭流44         io.close();45         // 重置流46         io.clear();47     }48 49     // 使用完流关闭流。50     io.close();51 52     return 0;53 }

       自行上机体验,不在此运行演示。

程序二代码及其注释

 1 #include <iostream> 2 #include <fstream> // 使用文件处理对象记着要包含这个头文件 3 #include <string> 4 #include <vector> 5   6 using namespace std; 7   8 int main() 9 {10     /*11      * 获取用户需要打开的所有文件名,将其保存在顺序容器files中。12     */13     string filename;14     vector<string> files;15     cout << "请输入要处理的文本文件名( #结束 ):" << endl;16     while (cin >> filename) {17         if (filename=="#") break;18         files.push_back(filename);19         cout << "请输入要处理的文本文件名( #结束 ):" << endl;20     }21     // 清空输入缓冲区22     cin.ignore(1024, \n);23     cout << endl << "文件名录入完毕..." << endl << endl;24 25     /*26      * 遍历文件名,并依次往文件中写入数据。27     */28     fstream io;29     for (vector<string>::iterator it = files.begin(); it != files.end(); it++) {30         // 打开文件31         io.open(it->c_str());    32         // 打开文件失败的异常处理33         if (!io) {34             cout << "文件 " << it->c_str() << " 打开失败!" << endl;35             continue;36         }37         /*38          * 往文件写入数据39         */40         cout << "文件: " << it->c_str()  << "( 单行输入#结束写入 )" << endl;41         string s;42         while (getline(cin, s)) {43             if (s == "#") break;44             io << s << endl;45         }    46         cout << endl << "文件" << it->c_str() << "写入完毕" << endl << endl << endl;47         // 重置流前要先关闭流48         io.close();49         // 重置流50         io.clear();51     }52 53     // 使用完流关闭流54     io.close();55 56     return 0;57 }

       自行上机体验,不在此运行演示。

说明

  1. 我之所以选用的例子是处理多个文件而不是单个文件,是想在代码中体现出用单个流对象处理多个文件的技巧。

  2. 文件IO操作还有许多功能,诸如控制打开模式,获得流状态等等。详情参考各C++教材。

第七篇:两个经典的文件IO程序示例