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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • sdfsdfsdsdfsdf

    sdfsdfsdsdfsdf3444444grggerggdfgdgd你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带…

  • Java 验证二代身份证号码是否正确

    Java 验证二代身份证号码是否正确送一个限制Edittext只输入身份证号包含的字符edittext.setKeyListener(newNumberKeyListener(){@OverridepublicintgetInputType(){returnandroid.text.InputType.TYPE_CLASS_PHON

  • MySQLdump的参数详解大全

    MySQLdump的参数详解大全

  • 伽马校正和颜色空间

    伽马校正和颜色空间一、伽马校正所谓gamma校正,实际上是一个颜色的非线性曲线变换。下面来解释这个曲线存在的原因。1.1人眼的非线性视觉效应为什么要有gamma校正了。一言以蔽之,人眼的生理效应。如下图所示,第一行是人眼感受到的线性亮度变化,第二行是真实的非线性亮度变化。可以得出结论,首尾两端是一致的,但是中间值变化不一致;真实的中间亮度值必须更大,才能得到人眼感知的线性亮度变化。我们的目的是让人眼感受到线性的亮度变化曲线,因此输入亮度必须是第二行这种非线性的亮度变化曲线。第二行的亮度变化曲线,就是伽马校正曲线

  • java中线程池参数设置

    java中线程池参数设置本文主要介绍线程池是解决了哪些问题以及线程池中的corePoolSize(核心线程数),queueCapacity(等待队列的长度),maximumPoolSize(最大核心线程数)。本文不会对线程池各个参数介绍,假定你已经了解了线程池各个参数的含义。1为什么要有线程池呢?当前实际应用中,经常会遇到单个请求处理时间短但请求量巨大但问题,简单说就是qps很高,平响时间很短的情况。…

  • jsonobject string转json_发展对象转不了预备党员

    jsonobject string转json_发展对象转不了预备党员用阿里的fastjson里的一个方法,导入fastjson包SONObjectjsonObject1=JSONObject.parseObject(String)

发表回复

您的电子邮箱地址不会被公开。

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