首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++覆盖或删除指定位置的文件内容

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

作者头像
恋喵大鲤鱼
发布2018-08-03 11:19:58
3.5K0
发布2018-08-03 11:19:58
举报
文章被收录于专栏:C/C++基础C/C++基础

1.覆盖指定位置的文件内容

我们经常使用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);

2.删除指定位置的文件内容

很遗憾,C++的文件流并没有提供这样的功能,我们只能先读取保留的内容,再以截断模式写回原文件[3]^{[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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年03月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.覆盖指定位置的文件内容
  • 2.删除指定位置的文件内容
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档