利用C++如何覆盖或删除指定位置的文件内容
2017-08-09 09:03
3315 查看
前言
最近在工作中遇到一个问题,需要覆盖或者删除指定位置的文件内容,发现网上这方面的资料较少,无奈只能自己解决,下面将自己解决的方法分享给大家,方便大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
一、覆盖指定位置的文件内容
我们经常使用ofstream或者fstream可写文件,使用ifstream可以写文件,但需要设置文件的打开状态为iOS::out。C++中IO流打开模式使用位掩码来表示。
IO流打开模式有:
成员常量 | |
---|---|
app | append,追加模式,设置流指针在每一个操作前均指向文件流末尾 |
ate | at end,设置流指针在打开时指向文件流末尾 |
binary | 以二进制模式开打文件流 |
in | input,输入模式,允许读取文件流 |
out | output,输出模式,允许写入文件流 |
trunc | truncate,截断模式,打开文件流时清空所有内容 |
些常数在ios_base类定义为public成员。因此,可以直接以类名字加作用域运算符访问(如
ios_base::out),或使用ios_base的任何继承类或实例化的对象,例如
ios::out或
cout.out。
ofstream在打开文件时默认清空文件所有内容。如果使用
ios::app来打开文件,虽然不会清空文件内容,但是每次写操作都追加到文件末尾。
int main(){ fstream fout; fout.open("hello.txt",fstream::binary | fstream::out | fstream::app); pos=fout.tellp(); fout.seekp(-5,ios::end); fout.write("####",4); fout.close(); return 0; }
上面的操作虽然使用了文件指针偏移操作
fout.seekp(-5,ios::end);,但是每次写入还是追加到文件末尾,解决办法使用文件打开模式
ios::in,这样可以保证文件内容不会被清空,且文件指针偏移操作有效。
fout.open("hello.txt",fstream::binary | fstream::out | fstream::in); //或 fstream fout("hello.txt",fstream::binary | fstream::out | fstream::in);
二、删除指定位置的文件内容
很遗憾,C++的文件流并没有提供这样的功能,我们只能先读取保留的内容,再以截断模式写回原文件[3]。
总结
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
参考文献
[1]C++ overwriting data in a file at a particular position
[3]overwriting some text in a file using fstream and delete the rest of the file
您可能感兴趣的文章:
相关文章推荐
- C++覆盖或删除指定位置的文件内容
- 如何利用c++ 把数据加入到txt文件的末尾而不覆盖文件中已有的数据
- shell如何在指定文件的指定位置后面添加内容
- 利用RandomAccessFile类在指定文件指定位置插入内容
- C++实现的 如何删除一个指定的文件
- shell如何在指定文件的指定位置后面添加内容
- [ZZ]save函数如何保存数据而不覆盖原来的文件内容
- [Java] 利用xpdf库获取pdf文件的指定范围文本内容
- 如何从文件中提取指定位置的数据????
- 在Asp.Net中如何将从SQL读出来的表转化成XML文件并保存在指定的位置中
- c++中mfc写文件 把信息写入文件不覆盖原来的内容问题解决
- DOS命令,删除指定文件夹的全部内容 删除指定文件夹所有文件
- c 删除文件中指定的部分内容
- c/c++从文件指定位置读指定个数字符
- 利用WINDOWS标准函数来删除INI文件内容
- 1.1 VS2008中如何指定EXE文件输出位置
- C++如何删除文件夹及包含的文件
- 初来乍道,问个比较菜的问题:如何把一文件中指定的内容提取出来?
- 在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0
- 如何批量删除指定路径中的所有内容为空的文件夹