第七篇:两个经典的文件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++教材。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ionic css 自定义样式

    ionic css 自定义样式

    2021年9月9日
  • c语言 数组存放规则,C语言数组详解

    c语言 数组存放规则,C语言数组详解数组在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。数组类型说明在C语言中使…

    2022年7月27日
  • 两款实用的DDos攻击工具[通俗易懂]

    两款实用的DDos攻击工具[通俗易懂]两款实用的DDos攻击工具2018-02-22Network•Security865之前为了重现某个bug,需要对网络设备进行ddos攻击测试,同时也是对设备的网络攻击防护功能进行抗压测试。临阵磨枪,google了两款攻击工具,windows平台的hyenae,以及Linux平台的hping3,在此记录一下两者的用法。Hyenaehyenae是在Windows平台上非常好用的一…

    2022年7月27日
  • pycharm怎么用啊_我不想用失去来教会你

    pycharm怎么用啊_我不想用失去来教会你一、PyCharm设置中文(无需汉化包)1、点击左上角的File选项2、选择Settings选项3、点击Plugins选项,等待一会儿,页面出来比较慢。

    2022年8月28日
  • 如何在WinForm中发送HTTP请求

    如何在WinForm中请求发送HTTP手工发送HTTP请求主要是调用System.Net的HttpWebResponse方法手工发送HTTP的GET请求:手工发送HTTP的POST请求转自:

    2021年12月26日
  • 什么是协程「建议收藏」

    什么是协程「建议收藏」来自:程序员小灰(微信号:chengxuyuanxiaohui)—————第二天—————————————————什么是进程和线程有一定基础的小伙伴们肯定都知道进程和线程。进程是什么呢?直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。进程拥有代码和打开的文件资源、数据资…

    2022年7月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号