第七篇:两个经典的文件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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • QVBoxLayout的使用

    QVBoxLayout的使用#include&lt;QApplication&gt;#include&lt;QPushButton&gt;#include&lt;QWidget&gt;#include&lt;QMenuBar&gt;#include&lt;QStatusBar&gt;#include&lt;QVBoxLayout&gt;#include&lt;QTextEdit&gt;#include&amp

    2022年6月17日
  • 数据结构–链表的排序详解

    数据结构–链表的排序详解1、前言前面两篇博客,我已经把线性表的两种基本的表示形式,做了一个基本的介绍和一些对比。但是,我突然发现在链表这里我缺少一个很重要的内容,那就是对我们的链表进行排序,其实,在连接两个链表的时候,就要求我们的那两个链表是有序的。2、链表排序—最简单、直接的方式(直接采用冒泡或者选择排序,而且不是交换结点,只交换数据域)//线性表的排序,采用冒泡排序,直接遍历链表voidListsort(Nod

    2022年10月11日
  • sparksql 概述

    sparksql 概述

    2021年11月27日
  • oracle里面建立数据库,oracle创建数据库的3种方式

    oracle里面建立数据库,oracle创建数据库的3种方式一.oracle下创建数据库一般有三种方法:1.手工创建2.利用DBCA创建3.利用OUI创建二.在创建之前,先介绍一下oracle数据库管理文件的方式。oracle数据库创建其实就是创建数据库的逻辑结构和物理结构,逻辑结构可以通过初始化参数文件控制,而物理结构就通过OFA控制;也就是用OFA来控制在操作系统级别的文件组织,例如在windows系统下,安装数据库的时候会在数据库安装目录下生成这样…

    2022年7月13日
  • Java中的Scanner用法解析

    Java中的Scanner用法解析一、Scanner类简介Java5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。简介Scanner类是java.util包中的一个类作用常用于控制台的输入,当需要使用控制台输入时即可调用这个类二、Scanner类的用法使用方法1、首先需要构造一个Scanner类的对象,并且与标准输入流System.in关联…

    2022年7月9日
  • Matlab仿真PID控制(带M文件、simulink截图和参数分析)

    Matlab仿真PID控制(带M文件、simulink截图和参数分析)在直接数字域设计中,我们常常需要用到PID算法,而PID算法投入单片机使用时,往往需要硬件的支持,在调试时非常麻烦。本文通过Matlab仿真的手段实现PID,方便了开发者对系统的设计和实时调试。

    2022年6月6日

发表回复

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

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