C++覆盖或删除指定位置的文件内容
2017-03-16 16:52
976 查看
1.覆盖指定位置的文件内容
我们经常使用ofstream或者fstream可写文件,使用ifstream可以写文件,但需要设置文件的打开状态为ios::out。C++中IO流打开模式使用位掩码来表示。IO流打开模式有:成员常量 | |
---|---|
app | append,追加模式,设置流指针在每一个操作前均指向文件流末尾 |
ate | at end,设置流指针在打开时指向文件流末尾 |
binary | 以二进制模式开打文件流 |
in | input,输入模式,允许读取文件流 |
out | output,输出模式,允许写入文件流 |
trunc | truncate,截断模式,打开文件流时清空所有内容 |
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]。参考文献
[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
相关文章推荐
- 利用C++如何覆盖或删除指定位置的文件内容
- C++ Demo 001: 读取一个从命令行指定的文件,输出文件内容到显示器,并且给每一行输出添加一个行号
- python读取指定字节及位置的文件内容
- 使用sed在一个文件中指定位置插入另外一个文件的内容-r命令的使用
- C# 从内嵌资源读取文件内容并写入到指定位置
- python 将一个文件中内容添加到另一个文件指定位置
- c++中mfc写文件 把信息写入文件不覆盖原来的内容问题解决
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- 遍历INI文件和删除指定域内容
- bash删除文件中含"指定内容"的行
- struts2中删除放置在指定位置的文件
- VC MFC删除指定文件或文件夹内容
- VC MFC删除指定文件或文件夹内容
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- 遍历INI文件和删除指定域内容
- 在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0
- qt删除指定文件夹下所有内容,包括文件夹、文件
- linux 下pyhton 删除指定目录下所有的重复内容的文件
- c++删除指定字符串之间的内容(比正则表达式快几十倍)[转]
- windows删除指定位置中文件的脚本