首页 > 代码库 > 第七篇:两个经典的文件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程序示例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。