std::of流默认情况下是截断还是附加
Does std::ofstream truncate or append by default?
如果在没有openmode
标志的情况下调用std::ofstream
构造函数,则默认标志为ios_base::out
。但这意味着ios_base::trunc
还是ios_base::app
?
换句话说,如果您的文件系统中已经有一个非空文件"passer.txt",并且您调用
std::ofstream stream( "past.txt" );
stream << "new content";
"新内容"会被附加到"过去的.txt"的先前内容上吗?还是会取代先前的内容?
短版本
默认情况下会截断。
中等版本
这个标准基本上是意大利面条,但它最终归结为说它相当于说fopen(const char*, "w")
(27.9.1.4[filebuf.members](,这将我们引向ISO C 7.9标准。
检查结果为我们提供了§7.19.5.3"fopen函数",该函数指定了传递"w"时的行为:
w截断为零长度或创建用于写入的文本文件
长版本
如果你想自己遵循意大利面条的踪迹,请从27.9.1.11[ofstream.cons]开始,它将构造函数的行为描述为效果:构造
class basic_ofstream<charT,traits>
的对象,使用初始化基类basic_ostream(&sb
(和用basic_filebuf<charT,traits>())
初始化sb
(27.7.3.2、27.9.1.2(,则调用CCD_ 11。如果该函数返回空指针,则调用setstate(failbit)
。
其中rdbuf()
返回basic_filebuf<charT,traits>*
(27.9.1.13[流](
这就引出了27.9.1.1[filebuf],或者更具体地说,27.9.1.4[filebuf.members],它描述了open
函数:
basic_filebuf<charT,traits>* open(const char* s, ios_base::openmode mode);
作为
效果:如果
is_open() != false
,则返回一个空指针。否则,根据需要初始化filebuf。如果可能的话,它会打开一个文件,其名称为NTBSs
(就像调用std::fopen(s,modstr)
一样(。NTBSmodstr
是根据CCD_ 20确定的,如表132所示。如果模式为如果表中没有显示某些标志组合,则打开失败。
NTBS:以空结尾的字节字符串
表132描述了C++ios_base::openmode
和C风格stdio字符串之间的等价规则:
Table 132 — File open modes | | 'ios_base' flag combination | 'stdio' equivalent | | binary | in | out | trunc | app | | | | | + | | | "w" | | etc... |
这让我们看到了同一页上的脚注:
在
<cstdio>
(27.9.2(中声明函数签名fopen(const char*, const char*)
和fseek(FILE*, long, int)
不出所料,它将我们发送到27.9.2[c.files],它提供了几乎无用的表134,但随后引用了c标准:
另请参见:ISO C 7.9,修改件1 4.6.2。
我在这个答案的主要部分谈到了这一点。
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在C++中如何在没有pow的情况下进行基础计算
- 松弛原子与无同步情况下的记忆连贯性
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- std::of流默认情况下是截断还是附加