两个经典的文件IO程序示例
前言
本文分析两个经典的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程序示例的更多相关文章
- 第七篇:两个经典的文件IO程序示例
前言 本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅. 程序功能 程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据. 程序一代码及其注释 # ...
- CTF两个经典的文件包含案例
案例一URL:http://120.24.86.145:8003/代码 <?php include "waf.php"; include "flag.php&quo ...
- python学习之路-第八天-文件IO、储存器模块
文件IO.储存器模块 文件IO 代码示例: # -*- coding:utf-8 -*- #! /usr/bin/python # filename:using_file.py poem = '''\ ...
- linux 中的页缓存和文件 IO
本文所述是针对 linux 引入了虚拟内存管理机制以后所涉及的知识点.linux 中页缓存的本质就是对于磁盘中的部分数据在内存中保留一定的副本,使得应用程序能够快速的读取到磁盘中相应的数据,并实现不同 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
留着参考 EncrytService package com.my.service; import java.io.File; import java.io.FileInputStream; impo ...
- JAVA 基础编程练习题50 【程序 50 文件 IO】
50 [程序 50 文件 IO] 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), 计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件&qu ...
- asp.net 文件上传示例整理
ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. 代码如下 复制代码 ...
- 第一个Mybatis程序示例 Mybatis简介(一)
在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“internet”和“aba ...
随机推荐
- 升级springboot 2.x 踩过的坑——跨域导致session问题
目前IT界主流前后端分离,但是在分离过程中一定会存在跨域的问题. 什么是跨域? 是指浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域. 做过web后台的童鞋都知道,跨 ...
- Docker 架构详解
Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...
- gitlab 安装遇到 fatal:does not appear to be a git repository fatal: Could not read from remote repository. 问题
Cloning into 'door_lock_bsp'... git@192.168.1.5's password: fatal: 'door_lock/door_lock_bsp.git' do ...
- serializeObject 的应用
function sendForm() { var invOrderModelWrapper = {}; // 头 var objHeader = $('#invOrderForm').seriali ...
- ListView+EditText使用遇到的坑
最近项目中某功能需要ListView嵌套EditText来实现,使用过程中遇到一些问题: 1.点击弹出编辑框,edittext会失去焦点. 解决焦点丢失的问题 解决思路:软键盘弹出的时候会重新绘制界面 ...
- HDU 5988最小网络流(浮点数)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5988 哇,以前的模版一直T,加了优先队列优化才擦边过. 建图很好建,概率乘法化成概率加法不 ...
- SPOJ 7001 VLATTICE【莫比乌斯反演】
题目链接: http://www.spoj.com/problems/VLATTICE/ 题意: 1≤x,y,z≤n,问有多少对(x,y,z)使得gcd(x,y,z)=1 分析: 欧拉搞不了了,我们用 ...
- 虚拟机centos 同一个tomcat、不同端口访问不同的项目
在tomcat中复制webapps目录,并重命名:
- k8s资源清单定义入门
1.资源分类 a.workload型资源:service.pod.deployment.ReplicaSet.StatefulSet.Job.Cronjob; b.服务发现及服务均衡资源型资源:Ser ...
- Java线程池的内部实现
一.线程池介绍 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池可以对线程进行统一的分配.调优和监控,并有以下好处: (1)降低资源消耗. (2)提高响应速 ...