写文件有三种模式:

  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. CodeForces - 415B Mashmokh and Tokens

    Bimokh is Mashmokh's boss. For the following n days he decided to pay to his workers in a new way. A ...

  2. Educational Codeforces Round 26 Problem C

    C. Two Seals time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  3. python 解析网址信息

    python 解析网址信息 本篇文章主要讲述python 中如何解析一个url的信息. 1: requests获取网页信息 #!/usr/bin/python3 # -*- coding: UTF-8 ...

  4. apache+mysql+php环境安装及配置

    一.安装mysql 1.yum安装mysql # yum -y install mysql mysql-server 2.安装mariadb,用mariadb来启动数据库,systemctl star ...

  5. Hash-based Message Authentication Code(HMAC)

    一.引言 在现代信息安全领域,消息认证码(Message Authentication Code,简称MAC)起着至关重要的作用.Hash-based Message Authentication C ...

  6. IIS通过ARR实现负载均衡

    一.实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访 ...

  7. Python——第二章:字符串操作——总结

    总结: f"{变量}"  格式化字符串最优方法 索引.切片.步长: 索引:从0开始计算的.[5] 切片:s[start: end: step],end位置的数据永远拿不到,左闭又开 ...

  8. 安装Zabbix客户端zabbix-agent2

    Ubuntu系统:下载链接:http://mirrors.aliyun.com/zabbix/zabbix/6.0/ubuntu/pool/main/z/zabbix/?spm=a2c6h.25603 ...

  9. 神经网络优化篇:详解梯度检验(Gradient checking)

    梯度检验 梯度检验帮节省了很多时间,也多次帮发现backprop实施过程中的bug,接下来,看看如何利用它来调试或检验backprop的实施是否正确. 假设的网络中含有下列参数,\(W^{[1]}\) ...

  10. DWS轻量化更新黑科技:宽表加工优化

    本文分享自华为云社区<GaussDB(DWS)性能调优:宽表加工优化方案>,作者:譡里个檔 . 1. 业务背景 宽表加工性能慢,在Gauss(DWS)中可以使用DWS的轻量化更新的黑科技实 ...