前言

  本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅。

程序功能

  程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据。

程序一代码及其注释

 #include <iostream>
#include <fstream> // 使用文件处理对象记着要包含这个头文件
#include <string>
#include <vector> using namespace std; int main()
{
/*
* 获取用户需要打开的所有文件名,将其保存在顺序容器files中。
*/
string filename;
vector<string> files;
cout << "请输入要处理的文本文件名( ctrl+d结束 ):" << endl;
while (cin >> filename) {
files.push_back(filename);
cout << "请输入要处理的文本文件名( ctrl+d结束 ):" << endl;
}
cout << endl << "文件名录入完毕..." << endl << endl; /*
* 遍历文件名,并输出各个文件。
*/
// 创建一个流对象
fstream io;
for (vector<string>::iterator it = files.begin(); it != files.end(); it++) {
// 打开文件
io.open(it->c_str());
// 打开文件失败的异常处理
if (!io) {
cout << "文件 " << it->c_str() << " 打开失败!" << endl;
continue;
}
/*
* 打印文件内容
*/
cout << "文件: " << it->c_str() << endl;
string s;
while (getline(io, s))
cout << s << endl;
cout << endl << "文件" << it->c_str() << "读取完毕" << endl << endl << endl;
// 重置流前要先关闭流
io.close();
// 重置流
io.clear();
} // 使用完流关闭流。
io.close(); return ;
}

  自行上机体验,不在此运行演示。

程序二代码及其注释

 #include <iostream>
#include <fstream> // 使用文件处理对象记着要包含这个头文件
#include <string>
#include <vector> using namespace std; int main()
{
/*
* 获取用户需要打开的所有文件名,将其保存在顺序容器files中。
*/
string filename;
vector<string> files;
cout << "请输入要处理的文本文件名( #结束 ):" << endl;
while (cin >> filename) {
if (filename=="#") break;
files.push_back(filename);
cout << "请输入要处理的文本文件名( #结束 ):" << endl;
}
// 清空输入缓冲区
cin.ignore(, '\n');
cout << endl << "文件名录入完毕..." << endl << endl; /*
* 遍历文件名,并依次往文件中写入数据。
*/
fstream io;
for (vector<string>::iterator it = files.begin(); it != files.end(); it++) {
// 打开文件
io.open(it->c_str());
// 打开文件失败的异常处理
if (!io) {
cout << "文件 " << it->c_str() << " 打开失败!" << endl;
continue;
}
/*
* 往文件写入数据
*/
cout << "文件: " << it->c_str() << "( 单行输入#结束写入 )" << endl;
string s;
while (getline(cin, s)) {
if (s == "#") break;
io << s << endl;
}
cout << endl << "文件" << it->c_str() << "写入完毕" << endl << endl << endl;
// 重置流前要先关闭流
io.close();
// 重置流
io.clear();
} // 使用完流关闭流
io.close(); return ;
}

  自行上机体验,不在此运行演示。

说明

  1. 我之所以选用的例子是处理多个文件而不是单个文件,是想在代码中体现出用单个流对象处理多个文件的技巧。

  2. 文件IO操作还有许多功能,诸如控制打开模式,获得流状态等等。详情参考各C++教材。

两个经典的文件IO程序示例的更多相关文章

  1. 第七篇:两个经典的文件IO程序示例

    前言 本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅. 程序功能 程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据. 程序一代码及其注释 # ...

  2. CTF两个经典的文件包含案例

    案例一URL:http://120.24.86.145:8003/代码 <?php include "waf.php"; include "flag.php&quo ...

  3. python学习之路-第八天-文件IO、储存器模块

    文件IO.储存器模块 文件IO 代码示例: # -*- coding:utf-8 -*- #! /usr/bin/python # filename:using_file.py poem = '''\ ...

  4. linux 中的页缓存和文件 IO

    本文所述是针对 linux 引入了虚拟内存管理机制以后所涉及的知识点.linux 中页缓存的本质就是对于磁盘中的部分数据在内存中保留一定的副本,使得应用程序能够快速的读取到磁盘中相应的数据,并实现不同 ...

  5. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  6. 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)

    留着参考 EncrytService package com.my.service; import java.io.File; import java.io.FileInputStream; impo ...

  7. JAVA 基础编程练习题50 【程序 50 文件 IO】

    50 [程序 50 文件 IO] 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), 计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件&qu ...

  8. asp.net 文件上传示例整理

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录.  代码如下 复制代码 ...

  9. 第一个Mybatis程序示例 Mybatis简介(一)

    在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“internet”和“aba ...

随机推荐

  1. jq 的replaceWith方法在360下面会出现兼容问题

    弄的繁琐点, 先remove旧的元素,然后append就好了

  2. c#.net分类上升达人~~~呵呵。。。

    原文发布时间为:2008-11-11 -- 来源于本人的百度文章 [由搬家工具导入] 觉得自己蛮无聊的~~~~~~~~~(>_<)~~~~

  3. 应用seajs 做了个向上滚动的demo

    目录结构式这样滴 sea sea-module jquery-1.10.2.min.js sea.js static css t.min.css img test test.min.js main.j ...

  4. inline关键词的使用(转载)

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...

  5. 去掉 NavigationBar 底部的那条黑线

    //加入下面两行代码即可[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UI ...

  6. LightOJ 1140: How Many Zeroes? (数位DP)

    当前数位DP还不理解的点: 1:出口用i==0的方式 2:如何省略状态d(就是枚举下一个数的那个状态.当然枚举还是要的,怎么把空间省了) 总结: 1:此类DP,考虑转移的时候,应当同时考虑查询时候的情 ...

  7. PropertyPlaceholderConfigurer 基本用法

    目录 一.PropertyPlaceholderConfigurer 的继承体系 二.PropertyPlaceholderConfigurer 的基本概念 三.PropertyPlaceholder ...

  8. javascript 函数初探 (六)--- 闭包初探#3

    相关定义与闭包: 实际上,每个函数都可以被认为是一个闭包.因为每个函数都在其所在域(即该函数的作用域)中维护了某种联系. 但在大多数的时候,该作用于在函数体内被执行完之后就被自行销毁了.---除非发生 ...

  9. 跟开涛学SpringMVC(4.1):Controller接口控制器详解(1)

    http://www.importnew.com/19397.html http://blog.csdn.net/u014607184/article/details/52074530 https:/ ...

  10. ubuntu安装 uwsgi

    http://www.jianshu.com/p/e6ff4a28ab5a/ sudo apt-get install python-dev #不安装这个,下面的安装可能会失败 sudo pip in ...