写文件有三种模式:

  1. 截断写,文件打开之后立即清空原有内容
  2. 附加写,文件打开之后不清空原有内容,每次只能在文件最后写入
  3. 覆盖写,文件打开之后不清空原有内容,可以在文件任意位置写入

例如:文件原有内容为 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::truncstd::ios::app 的情况下设置 std::ios::out,只能使用 std::ios::in | std::ios::out。因此修改代码为:

#include <fstream>

int main()
{
std::fstream ofile("test.txt", std::ios::in | std::ios::out);
ofile << "abcd";
}

成功输出 abcd56。覆盖写并没有被 C/C++ 标准直接支持,因此只能借助这种奇怪的组合实现。下面的写法也与其等价:

std::ofstream ofile("test.txt", std::ios::in);
ofile << "abcd";

std::ios::in | std::ios::out 和 C 语言的 r+ 等价,所有也可以这样写:

FILE* ofile = fopen("test.txt", "r+");
fprintf(ofile, "abcd");

在底层的 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++ 覆盖写文件的更多相关文章

  1. shell脚本实现覆盖写文件和追加写文件

    1.覆盖写文件 ">" date  > not_append_file.txt

  2. java写文件时往末尾追加文件(而不是覆盖原文件),的两种方法总结

    代码如下: import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; public ...

  3. PHP写文件函数

    /** * 写文件函数 * * @param string $filename 文件名 * @param string $text 要写入的文本字符串 * @param string $openmod ...

  4. java写文件

                                  randomAccessFile.close();              }                  e.printStack ...

  5. vim编程 插入 保存不退出 保存退出 退出不保存 另存为其他文件名 保存覆盖现有文件

    ---恢复内容开始--- 在xshell里写代码,如果需要编辑代码,可以输入  vim+ xxx.py  ,进入vim编辑界面 这里的xxx.py表示  python的存储文件,后缀名是.py. 1. ...

  6. CStdioFile 写文件

    前言: 介绍如何使用 CStdioFile 类去写文件. 完整工程代码,点我下载(请注意工程里面需要包含的 <locale.h>头文件 ) 示例: /// My Add // 获取当前路径 ...

  7. linux下移动或者复制文件覆盖相同文件夹时,文件夹里面的每个文件都提示是否覆盖

    链接地址:http://blog.chinaunix.net/uid-23683795-id-2391087.html # vi ~/.bashrc   如果你看到如下内容,以下命令都会用别名执行了, ...

  8. Golang覆盖写入文件的小坑

    记录一点Golang文件操作的笔记,环境:Ubuntu // 删除文件 func removeFile() { err := os.Remove("test.txt") if er ...

  9. Python: 读文件,写文件

    读写文件是最常见的IO操作.Python内置了读写文件的函数. 读写文件前,我们先了解一下,在磁盘上读写文件的功能都是有操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求 ...

  10. FileWriter 写文件

    FileWriter fw = new FileWriter("C://Users//pc//Desktop//aaa.txt",true); fw.write("201 ...

随机推荐

  1. Sliver 二开准备

    cs被杀麻了,最近打算看看一下sliver的源码进行一下二开,这篇是记录遇到的一些问题 编译sliver Windows下 官方说用MingW,但是我自己用他带的make不行, ​​ ‍ 下载make ...

  2. JavaImprove--Lesson02--Object类,Objects工具类,封装类

    一.Object类 Java中的Object类是所有类的超类,它是Java类层次结构的根类.这意味着所有的类都直接或间接地继承自Object类 equals(Object obj): 用于比较两个对象 ...

  3. 当 BACnet 遇上 IoT,你将体验到不一样的大楼

    本文分享自华为云社区<当 BACnet 遇上 IoT>,作者:美码师zale . 引言 在十四五规划中,"新基建"无疑是倍受关注的重点领域.而关于"新基建&q ...

  4. 数据湖探索DLI新功能:基于openLooKeng的交互式分析

    摘要:基于华为开源openLooKeng引擎的交互式分析功能,将重磅发布便于用户构建轻量级流.批.交互式全场景数据湖. 在这个"信息爆炸"的时代,大数据已经成为这个时代的关键词之一 ...

  5. 想了解Webpack,看这篇就够了

    摘要:Webpack是一种前端资源构建工具,一个静态模块打包器. 1. 摘要 Webpack是一种前端资源构建工具,一个静态模块打包器.在Webpack看来,前端的所有资源文件(js/json/css ...

  6. 5大特性,带你认识化繁为简的华为云CodeArts Deploy

    摘要:2月27日,华为云发布持续部署服务CodeArts Deploy,通过模块化自由编排部署流程,实现软件的自动化部署,帮助企业软件产品的快速.高效.高质量交付. 本文分享自华为云社区<化繁为 ...

  7. 云图说丨初识云应用引擎CAE

    摘要:开发运营一个应用软件,面临种种挑战:软件栈厚重.开发上线慢.资源易浪费.运维投入高.突发流量应对困难. 华为云应用引擎CAE面对挑战,一扫而光!! 本文分享自华为云社区<[云图说] | 第 ...

  8. 物联网企业该如何与华为云合作,这份FAQ值得一看

    摘要:关于华为云DevRun智联生活行业加速器,梳理出伙伴和企业最关心的问题,并逐一解答. 自华为云DevRun智联生活行业加速器发布以来,一直在为产业链上下游的企业提供技术.生态建设.商业变现等资源 ...

  9. iOS App 上架流程图文教学

    在上架 App 之前必须先准备好开发者帐号,但申请开发者帐号因法兰克早在之前已经申请好了,故就跳过此步骤,直接从产生凭证到上传 App 开始讲起.首先,要将自己辛苦写好的 App 送审的话,则要依序做 ...

  10. 企业新道路怎么走?火山引擎AB测试助力决策选择

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   乐刻是一家创立8年的企业,除了消费者熟悉的乐刻健身房可办月卡.24小时营业等,其还有比外界了解更多元的业务.目 ...