gpt4 book ai didi

c++ - 为什么 ofstream ("log.txt", ios::app|ios::trunc);总是失败?

转载 作者:可可西里 更新时间:2023-11-01 17:01:00 31 4
gpt4 key购买 nike

以下代码是在 Windows 7 x64 上使用 VC++ 2012 年 11 月 CTP 编译的。

#include <fstream>

using namespace std;

int main()
{
ofstream fout("log.txt", ios::app|ios::trunc);
if (!fout)
{
cout << "An error occurred!" << endl; // Always go here! Why?
}
}

The cppreference.com website并没有说 ios::app 不能与 ios::trunc 组合。

ios::appios::trunc确切语义是什么?

最佳答案

传递这些标志的 filebuf 构造函数 具有基于 C++11 表 132 中定义的那些标志的行为:

+-----------------------------------+-------------------+
| ios_base flag combination | stdio equivalent |
| binary in out trunc app | |
+-----------------------------------+-------------------+
| + | "w" |
| + + | "a" |
| + | "a" |
| + + | "w" |
| + | "r" |
| + + | "r+" |
| + + + | "w+" |
| + + + | "a+" |
| + + | "a+" |
+-----------------------------------+-------------------+
| + + | "wb" |
| + + + | "ab" |
| + + | "ab" |
| + + + | "wb" |
| + + | "rb" |
| + + + | "r+b" |
| + + + + | "w+b" |
| + + + + | "a+b" |
| + + + | "a+b" |
+-----------------------------------+-------------------+

如您所见,您的标志组合在该表中找到。

[C++11: 27.9.1.4/2]: [..] If mode is not some combination of flags shown in the table then the open fails.

这些是语义。

[C++11: 27.9.1.7/2] & [C++11: 27.9.1.11/2] 向我们展示了模式从流对象传递到缓冲区对象。

关于c++ - 为什么 ofstream ("log.txt", ios::app|ios::trunc);总是失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084007/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com