【发布时间】:2018-04-11 09:16:09
【问题描述】:
This 问题询问app 和ate 之间的区别,答案和cppreference 暗示唯一的区别是app 表示将写入光标放在文件末尾之前每次写入操作,而ate 表示只有在打开文件时才会将写入光标放在文件末尾。
我实际看到的(在 VS 2012 中)是指定 ate 丢弃现有文件的内容,而 app 没有(它将新内容附加到先前存在的内容)。换句话说,ate 似乎暗示了trunc。
以下语句将“Hello”附加到现有文件:
ofstream("trace.log", ios_base::out|ios_base::app) << "Hello\n";
但是下面的语句只用“Hello”替换了文件的内容:
ofstream("trace.log", ios_base::out|ios_base::ate) << "Hello\n";
VS 6.0 的 MSDN 文档暗示不应该发生这种情况(但这句话似乎在 Visual Studio 的更高版本中已被撤回):
ios::trunc:如果文件已经存在,则丢弃其内容。 如果指定了 ios::out 并且 ios::ate、ios::app、 和 ios:in 未指定。
【问题讨论】:
标签: c++ visual-studio-2012 fstream