关于fstream修改文件内容的操作
来源:互联网 发布:结构动力特性试验数据 编辑:程序博客网 时间:2024/04/28 23:57
最近几天在做一个作业,频繁地用到文件操作。其中比较捉急的是对于文件内容的改写。我觉得修改可以分为两种,一种是定长修改,一种是长度发生变化的修改。两种修改都有一种通用的修改方法,不过这个方法非常没有效率,那就是建立一个tmp文件,把修改过后的内容放到里面,然后删掉原文件把tmp文件改成原文件的名字。这个方法显然不是很科学,而且如果文件内容很大,那么时间可能会挺长的。
抛去这个方法不说,定长修改的方法很简单,就是同时以ios::in与ios::out打开文件,不过其中还是有些需要注意的。
1.在进行文件写的时候(非二进制),文件指针很成问题。举个例子:比如文件的内容是"100100100",写入了三个int类型的变量,值为100。接下来我如果想改变第二个100,使其变成200,文件指针需要移动3位,因为前面有三个字符。这时候指针是一个字符一个字符的移动的。
#include <iostream>#include <fstream>using namespace std; int main(){ofstream ofs("cece.txt", ios::out);int x = 100;ofs << x << x << x;ofs.close();ofs.open("cece.txt", ios::out | ios::in);x = 200;ofs.seekp(3);ofs << x;}
2.而如果把文件换成二进制的写,那么情况就会有些变化,如果还是想改写第二个100的内容,那么文件指针就需要指向sizeof(int)。指针是一个byte一个byte地移动。 int存入的方式就是以int类型,将其原封写入文件,所以二进制的读写比较简单。
#include <iostream>#include <fstream>using namespace std; int main(){ofstream ofs("cece.txt", ios::out | ios::binary);int x = 100;ofs.write((char *)&x, sizeof(x));ofs.write((char *)&x, sizeof(x));ofs.write((char *)&x, sizeof(x));ofs.close(); ofs.open("cece.txt", ios::out | ios::in | ios::binary);x = 200;ofs.seekp(sizeof(int));ofs.write((char *)&x, sizeof(x));}3.经实验表明,ios::app Mode下是不能移动文件指针的,而且这个时候tellp()是0。此模式下只能在后面追加着写。
4.如果想要获得指向末尾的位置指针,需要
ofs.seekp(0, ios::end);pointer = ofs.tellp();
这个时候如果文件内没有内容,那么pointer的值会是-1。
等长修改就是这样,不等长修改的话,如果长度小于原来,可以写进去,然后添0,或者别的,大于原来的,目前只会tmp覆盖原文件的方法。
就是这样,嗯
0 0
- 关于fstream修改文件内容的操作
- 关于fstream 对文件的几个操作
- 文件操作fstream的使用方法
- C基于流fstream的文件操作
- C基于流fstream的文件操作
- fstream操作中文路径名的文件
- 关于vs2010 fstream.h文件的问题
- 文件操作 fstream
- C++ fstream文件操作
- C++ fstream文件操作
- <fstream>文件操作流
- fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream - 打开文件供读写
- fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream - 打开文件供读写
- [转]c++: fstream文件操作及对二进制文件的操作
- 关于python的txt文件内容修改的解决方案
- 关于fstream的flush
- C++文件操作(fstream类)
- isstringstream fstream文件读取操作
- 关于构造函数没有返回值的问题
- pu ke didi
- 设计模式(12) 代理模式(PROXY)
- double badminton match
- VC和GCC静态变量析构顺序不同
- 关于fstream修改文件内容的操作
- 类 的继承2
- 解bug的心得
- 【面向对象设计模式】 接口型模式 (一)
- PL/SQL Developer如何连接64位的Oracle
- 类和对象入门
- 大数据处理(转化成字符串)
- 《我的助理辞职了》,最近非常火的一篇文章,受益颇多,共勉!
- 如何吸引技术合伙人