C++抽象编程——数据文件的读写与修改
来源:互联网 发布:数据流程图的分析方法 编辑:程序博客网 时间:2024/06/05 12:41
这部分内容我在文件的介绍系列是没有提到的,我当时只是提到了怎么把打开一个文件,怎么再已有数据的文件里处理。其实我们怎么在文件中写入跟读取数据也是很重要的。
向文件中写入数据
首先我们在 f 盘建一个名为 my.txt 的空文件。在向文件写入数据的时候我们要声明一个输出文件流对象 。就像这样:
ofstream outfile;
声明了一个输出流的文件对象,名为outfile。我们可以利用其所在的头文件重载的 << 运算符直接对文件输出。举个例子:
#include <iostream>#include <fstream>#include <vector>using namespace std;int main(){ string str,str2; getline(cin,str); vector<int> vec; ofstream outfile; outfile.open("F:\\my.txt"); //打开文件 if (outfile.fail()){ outfile.clear(); cout << "打开文件失败" << endl; } outfile << str << endl; //输出完数据之后换行 for(int i = 0; i < 10; i++){ vec.push_back(i); outfile << vec[i] << " "; //向文件写入一个vector的数据0-9 } outfile.close(); return 0;}
这种方式是按行输入的。运行结果:
在文件的末尾接着写入
但是,显然一个文件之所以有价值,是因为我们能对其接着操作而不删除其原来的值。如果我们上面的文件,在我们关闭后,我们再想在其文件的末尾继续添加数据。我们再次按照上面的方法写入,那么我们之后写入的数据就会覆盖前面的内容,这显然不是我们想要的结果。C++为我们提供了各种打开文件的方法,它把写入的位置定在特定的位置,主要有下表:
除了这些方式,C++允许我们使用 “|”运算符来对这些操作进行组合(当然不能冲突)。例如:
ios::in|ios::out //打开的文件可以读也可以写ios::out|ios::app //以输出方式打开文件,然后我们在末尾写入数据
其实文件流还提供了 seekp(文件中的位置),这样的打开方式,但是我觉得我们会了组合,比这个方便很多。
现在我们来继续提出的问题,我们在上一个文件后面写入数据:
#include <iostream>#include <fstream>#include <vector>using namespace std;int main(){ string str,str2; getline(cin,str); ofstream outfile; outfile.open("F:\\my.txt",ios::out|ios::app); //打开文件,定位在文件的末尾 if (outfile.fail()){ outfile.clear(); cout << "打开文件失败" << endl; } outfile << str; outfile.close(); return 0;}
当然 我们可以按行输入,这样我们只要先写入一个换行,再写入数据就好了,结果就像下面的图:
PS:显然我们可以把outfile对象当做我们熟悉的cout来处理,只不过这个时候它面对的是文件而不是控制台而已
从文件读入数据并进行相关的处理
既然我们可以写入数据,那么当然我们可以读入数据再处理。来一段实例:
#include <iostream>#include <fstream>#include <vector>#include <algorithm>using namespace std;bool isOdd(int a);int main(){ ifstream infile; vector<int> vec(10); vector<int>::iterator it,it2; infile.open("F:\\my.txt",ios::out|ios::in); //打开文件,定位在文件的末尾 if (infile.fail()){ infile.clear(); cout << "打开文件失败" << endl; } cout << "读入的数据为:" << endl; for(int i = 0; i < 10; i++){ infile >> vec[i]; cout << vec[i] << " "; }//此时,我们已经把文件写入到我们的控制台 cout << endl; //然后我们可以对它进行正常的vector处理 cout << "执行移除奇数的操作:" << endl; it = remove_if(vec.begin(),vec.end(),isOdd); for(it2 = vec.begin(); it2 != it; it2++){ cout << *it2 << " "; } infile.close(); return 0;}bool isOdd(int a) { return (a % 2 == 1);}
运行结果:
阅读全文
0 0
- C++抽象编程——数据文件的读写与修改
- C++抽象编程——数据文件的基本操作
- C++抽象编程——数据文件的各种输出方式
- C 数据文件的添加,修改,删除
- 3.数据文件的读写
- 关于C和C++分别读写TXT数据文件的源代码
- C++抽象编程——STL实战(2)——查找与修改
- 修改oracle的数据文件
- [新手编程训练项目]003——C语言文本合并03:fread与fwrite函数对文本文件的读写
- LINUX C 数据文件的添加,修改,删除 实例
- LINUX C 数据文件的添加,修改,删除 实例
- LINUX C 数据文件的添加,修改,删除 实例
- R语言数据文件的读写
- C++抽象编程——如何修改map中的值
- C++抽象编程——STL实战(5)——map在数据文件查找中的应用
- 添加数据文件及修改数据文件的位置
- C#——重写与抽象类
- Julia :HDF5数据文件读写与更新
- 设计模式基础(一)
- Oracle 中的share Cursor 和 Library Cache (上)
- linux运维-postfix+mysql
- UVa10340 ALL IN ALL AC
- 设计原则(二)
- C++抽象编程——数据文件的读写与修改
- python中的函数参数详解
- json开发工具包一共有3个jar
- 简单工厂模式(三)
- MySQL数据库水平分表策略--一致性hash
- webservice-cxf-与spring整合
- UEditor在JavaWeb中的应用
- 读书笔记《Effective C++》条款33:避免遮掩继承而来的名称
- 4759: [Usaco2017 Jan]Balanced Photo