【发布时间】:2017-01-08 11:24:39
【问题描述】:
如果您在没有 openmode 标志的情况下调用 std::ofstream 构造函数,则 default flag is ios_base::out。但这是否意味着ios_base::trunc 或ios_base::app?
换句话说,如果您的文件系统中已经有一个非空文件“past.txt”并且您调用
std::ofstream stream( "past.txt" );
stream << "new content";
将“新内容”附加到“past.txt”的先前内容还是会替换先前的内容?
【问题讨论】:
-
我感觉这个问题是基于错误的参考选择。 This 应该更好。
-
ios_base::out与ios_base::out | ios_base::trunc相同。我找不到一个好的参考链接,但谷歌搜索命中了几个text books, -
根据 LogicStuff 的链接,ofstream ctor 默认为
out,在basic_filebuf::open中的行为与out|trunc相同,因此会被截断。 -
我投票决定将此问题作为题外话结束,因为可以从可用的正确参考资料中轻松找到答案。 (只是测试自己会证明)
-
听起来这可能是what's wrong with cplusplus.com的另一个例子,虽然这一次只是一个遗漏......