gpt4 book ai didi

c++ - ios_base::ate 和 ios_base::trunc 有什么区别?

转载 作者:行者123 更新时间:2023-11-28 02:37:55 31 4
gpt4 key购买 nike

这是来自MSDN的文档:ate,在首次创建控制对象时寻找流的末尾。

trunc,在创建控制对象时删除现有文件的内容。

我只是无法理解它们之间的区别,以下两个代码片段的行为相同(它们在插入之前清除内容),谁能帮我找出区别?

代码片段 1:

ofstream ofs(L"F:\\iMoney.txt", ios_base::trunc);
ofs << L"Hello, money~" << endl;
ofs.close();

代码片段 2:

ofstream ofs(L"F:\\iMoney.txt", ios_base::ate);
ofs << L"Hello, money~" << endl;
ofs.close();

最佳答案

要使 std::ate 真正有意义,您需要打开一个用于读写的 fstream:

std::fstream file("iMoney.txt", std::ios::in | std::ios::out | std::ios::ate);

这将保留现有内容,写入位置将从文件末尾开始,因此您写入的内容将附加到现有内容,除非您使用 seekp 移动写入位置别处。

相比之下,如果您指定 std::ios::trunc,所有现有内容将从文件中删除(无论指定 std::ios::instd::ios::out,或两者)。但是,如果您仅指定 std::ios::out,这是 std::ofstream 的默认设置),所有现有内容都将被删除。唯一一次 std::ios::trunc 添加任何有用的东西是您同时指定 inout 的内容,在这种情况下,现有内容如果您未指定 std::ios::trunc被保留。

关于c++ - ios_base::ate 和 ios_base::trunc 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900439/

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