前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第七篇:两个经典的文件IO程序示例「建议收藏」

第七篇:两个经典的文件IO程序示例「建议收藏」

作者头像
全栈程序员站长
发布2022-07-19 14:26:30
2310
发布2022-07-19 14:26:30
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

前言

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

程序功能

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

程序一代码及其注释

代码语言:javascript
复制
 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 }

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

程序二代码及其注释

代码语言:javascript
复制
 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++教材。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/108677.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 程序功能
  • 程序一代码及其注释
  • 程序二代码及其注释
  • 说明
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档