C++ 覆盖写文件
2022-05-05 12:02
1211 查看
写文件有三种模式:
- 截断写,文件打开之后立即清空原有内容
- 附加写,文件打开之后不清空原有内容,每次只能在文件最后写入
- 覆盖写,文件打开之后不清空原有内容,可以在文件任意位置写入
例如:文件原有内容为
123456,在开始位置覆盖写入
abcd,最后文件内容为
abcd56。首先使用下面的代码进行尝试:
#include <fstream> int main() { std::ofstream ofile("test.txt"); ofile << "abcd"; }
输出的结果为
abcd,原有内容被截断了。可是并没有设置
std::ios::trunc标志。
ofstream默认只设置了
std::ios::out。查阅 std::basic_filebuf<CharT,Traits>::open 发现单独的
std::ios::out和
std::ios::out | std::ios::trunc等价。想要在不设置
std::ios::trunc或
std::ios::app的情况下设置
std::ios::out,只能使用
std::ios::in | std::ios::out。因此修改代码为:
#include <fstream> int main() { std::ofstream ofile("test.txt", std::ios::in); ofile << "abcd"; }
成功输出
abcd56。覆盖写并没有被 C/C++ 标准直接支持,因此只能借助这种奇怪的组合实现。在底层的 Linux 有更直接的办法:
#include <fcntl.h> #include <unistd.h> int main() { int fd = open("test.txt", O_WRONLY); write(fd, "abcd", 4); close(fd); }
这段代码只用了简单的
O_WRONLY标志,就实现了覆盖写。
相关文章推荐
- c++中mfc写文件 把信息写入文件不覆盖原来的内容问题解决
- windows同名文件覆盖提示(c++实现)
- C++写文件时覆盖与否的问题
- c++ 根据文件的最后修改时间判断是否需要覆盖更新文件
- 如何利用c++ 把数据加入到txt文件的末尾而不覆盖文件中已有的数据
- C++服务器(四):git 如何强制覆盖本地文件and socket 的异步模式
- 利用C++如何覆盖或删除指定位置的文件内容
- C++覆盖或删除指定位置的文件内容
- Java 将字符串换行不覆盖写入txt文件
- C++创建txt文件并在文件内写上字符
- 转载:c++打印日志文件的一个模板
- VC/MFC(C++)实现文件拷贝和文件删除等
- 删除某路径下的物理文件 C++实现
- 【ThinkingInC++】3、文件的拷贝
- 使用c头文件和c++头文件区别
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C/C++ 中判断某一文件或目录是否存在
- OpenGL之C++实现读取txt文件并显示
- C++控制台程序调用C#的.dll文件
- C++中覆盖、重载、隐藏的区别(写给菜鸟们)