zoukankan      html  css  js  c++  java
  • 第七篇:两个经典的文件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, '
    ');
    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++教材。

  • 相关阅读:
    nodejs实现端到端加密
    DiffieHellman(迪菲-赫尔曼)密钥交换算法原理及其实现
    MongoDB主备 版本3.6.5
    linux源地址转换
    Mac下IDEA快捷键操作
    Ubuntu离线安装gcc
    VM安装Mac时,使用Unlocker12 插件时报getTools错误的问题
    华为OSPF与ACL综合应用实例讲解
    基于全局地址池的DHCP
    浮动静态路由及负载均衡
  • 原文地址:https://www.cnblogs.com/muchen/p/6351882.html
Copyright © 2011-2022 走看看