欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

利用C++如何覆盖或删除指定位置的文件内容

时间:2021-06-24 08:18:16|栏目:C代码|点击:

前言

最近在工作中遇到一个问题,需要覆盖或者删除指定位置的文件内容,发现网上这方面的资料较少,无奈只能自己解决,下面将自己解决的方法分享给大家,方便大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、覆盖指定位置的文件内容

我们经常使用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::outcout.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

[2]std::ios_base::openmode

[3]overwriting some text in a file using fstream and delete the rest of the file

上一篇:Inline Hook(ring3)的简单C++实现方法

栏    目:C代码

下一篇:在C++中反射调用.NET的方法(三)

本文标题:利用C++如何覆盖或删除指定位置的文件内容

本文地址:http://www.codeinn.net/misctech/147152.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有