前言

  本文分析两个经典的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. [BZOJ3261] 最大异或和 (异或前缀和,可持久化Trie)

    Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Q l r x:询问操作, ...

  2. scrapy之Selectors

    练习url:https://doc.scrapy.org/en/latest/_static/selectors-sample1.html 一 获取文本值 xpath In []: response. ...

  3. jquery插件的基本写法

    (function($){ var a={name:'2222',age:5555} var b={sex:'男',grade:5555} var c=$.extend({},a,b);//合并到新的 ...

  4. 【kindeditor】kindeditor的使用

    官网:http://kindeditor.net/demo.php 效果:

  5. 捕获错误并发邮件 register_shutdown_function

    /** * 脚本程序异常捕获 */ function handleError() { global $config; $error = error_get_last(); if (isset($err ...

  6. C语言集锦(一) C代码生成图片:BMP、PNG和JPEG

    1.生成BMP图片 在学习图形图像的过程中,最简单和常见的格式是BMP和PPM.下面将给出生成BMP的极度精简代码,然后讲解BMP格式. #include <stdio.h> #inclu ...

  7. Struts2的上传与下载

    转自:http://blog.csdn.net/Mark_LQ/article/details/49822821 10.1.1 文件上传基本案例   第一步:上传组件依赖与commons-fileup ...

  8. 洛谷—— P1577 切绳子

    https://www.luogu.org/problemnew/show/P1577 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长? ...

  9. k8s之存储卷及pvc

    1.存储卷概述 因为pod是有生命周期的,pod一重启,里面的数据就没了,所以我们需要数据持久化存储,在k8s中,存储卷不属于容器,而是属于pod,也就是说同一个pod中的容器可以共享一个存储卷,存储 ...

  10. Codeforces Gym 100431D Bubble Sort 水题乱搞

    原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...