前言

本文分析两个经典的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. JDK11 | 第五篇 : 启动单个Java源代码文件的程序

    文章首发于公众号<程序员果果> 地址 : https://mp.weixin.qq.com/s/h1L4FmzVSix434gVt8Fc7w 一.简介 JEP330-启动单文件代码程序(L ...

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

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

  4. 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)

    文本与程序的几种打开方法 文本文件的打开方法 函数名: cmd 命令 函数描述: 执行CMD命令 函数原型: cmd(cmdstr) 命令(cmd命令) 函数参数: cmdstr:cmd命令,此处执行 ...

  5. Java文件IO流的操作总结

    Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...

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

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

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

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

  8. Python学习笔记【第七篇】:文件及文件夹操作

     介绍 我们用pytthon.C#.Java等这些编程语言,想要把文件(文字.视频....)永久保存下来就必须将文件写入到硬盘中,这就需要我们应用程序去操作硬件,我们这些编程语言是无法直接操作硬件的. ...

  9. ElasticSearch入门 第七篇:分词

    这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

随机推荐

  1. Python 多行注释

    Python 使用" # ” 进行单行注释,本身不带多行注释. 但在编译器 PyCharm 中,可以用以下方法注释多行代码: 1.“选中一段要注释的代码——>Ctrl+ / ” 即可注 ...

  2. Spring MVC 框架搭建及具体解释

    如今主流的Web MVC框架除了Struts这个主力 外.其次就是Spring MVC了,因此这也是作为一名程序猿需要掌握的主流框架.框架选择多了.应对多变的需求和业务时,可实行的方案自然就多了. 只 ...

  3. Chrome应用技巧之颜色拾取

    之前在Chrome应用店找了个插件实现拾色功能.并且很不理想.不知道是不是曾经Chrome自带的开发工具没提供到拾色功能还是我没发现.今天无意中发现Chomer自带的开发工具可拾色,请看以下的GIF动 ...

  4. 判断Server Manager里面的Role是否已经安排

    用InstallState来判断 function Check-DataDeduplication{ Import-Module "ServerManager" -ErrorAct ...

  5. MySQL之mysql客户端工作的批处理一些使用手法

    通常我们会用mysql这个客户端程序来连接mysql库.这个通常是工作在交互式模式下的.如我们连接上mysql并执行如下操作: mysql -uroot -h127. -P3306 Welcome t ...

  6. [转载]一种高性能Hierarchical RBAC实现方案

    背景 框图 上图中,Role和被设置Permission的Resource都是可以有任意层级继承关系的. 举例 举一个网站的例子来说: 如果,User表示网站用户:Role表示角色:Resource表 ...

  7. 【Shader】人物选中高亮状态

    Shader "OutLine/RedOutLine" { Properties { _Switch("Value",Range(0,1)) = 0 _Main ...

  8. atitit.javascript js 上传文件的本地预览

    atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL  1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...

  9. [sh]清理memcached缓存

    #!/bin/bash ###author xxx ###date xxx ###清理内存缓存 used=`free -m | awk 'NR==2' | awk '{print $3}'` free ...

  10. JAVA中使用P和Q分量计算N和D进行RSA运算

    最近在使用Java中需要使用PQ形式的私钥进行RSA加解密运算,本来以为Java中应该很多类似的例子,发现所有的例子都是从ND形式的私钥,竟然没有人用分量P和Q计算N和D进行运算.对Java使用RSA ...