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


相关推荐

  • linux计划任务详解,Linux计划任务详解

    linux计划任务详解,Linux计划任务详解计划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。在Linux系统中,当我们需要在服务器上定时执行一些重复性的事件时使用的,可以通过Linux计划任务程序来运行准备好的脚本、批处理文件夹、程序或命令,在某个特定的时间运行。计划任务在Linux中一般使用Crontab,通过crontab命令,我们可…

    2022年7月13日
    18
  • 零基础学Java(1)初识Java程序「建议收藏」

    零基础学Java(1)初识Java程序「建议收藏」前言就国内来说,Java毫无疑问是后端语言中的No.1没有之一,所以今天我们也来0基础学习Java!!!Java的好处(针对测试工程师)面试加分->涨薪大多数公司服务端用的都是Java,

    2022年7月29日
    5
  • calendar类常用方法_设计一个日期类date

    calendar类常用方法_设计一个日期类date常量字段Calendar类的常量字段是非常重要的参数,在set()、add()、get()方法中都会用到。

    2022年9月23日
    3
  • 符合python命名规范的标识符是什么_Python标识符命名规范

    符合python命名规范的标识符是什么_Python标识符命名规范简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:大理石平台生产厂标识符是由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。标识符不能和Python中的保留字相同。有关保留字,后续章节会详细介绍。Python中的标识符中,…

    2022年6月25日
    33
  • hanoi 塔问题_Hanoi塔

    hanoi 塔问题_Hanoi塔importjava.util.Scanner;/* *汉罗塔问题 */publicclassHanoiExec{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(“请输入盘子数n”);Scanner

    2022年10月12日
    3
  • gradle command not found

    gradle command not found

    2021年9月14日
    86

发表回复

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

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