gpt4 book ai didi

c++ - 以附加模式打开文件但截断文件

转载 作者:行者123 更新时间:2023-11-30 02:44:02 26 4
gpt4 key购买 nike

我想在 append 模式下打开一个文件,但是,如果该文件已经存在,则覆盖其内容。

我已经尝试过类似的方法,但这行不通(我对 | 和 & 运算符没有太多经验,您会注意到):

 //does nothing
_fs.open(_path, std::ios_base::out | std::ios_base::app | std::ios_base::trunc);

然后我决定以 out 模式打开文件,然后在再次打开之前关闭它,但在 append 模式下,当然这似乎是一种糟糕的编程方式这样做:

if(fexists(_path.c_str())){//Checks if the file exists
_fs.open(_path, std::ios::out);//Overrides the contents
_fs.close();
}

_fs.open(_path, std::ios_base::out | std::ios_base::app);

然后凭直觉我写了这样的东西:

_fs.open(_path, std::ios_base::out | std::ios_base::app & std::ios_base::out | std::ios_base::trunc);

现在它可以工作了,为什么?

最佳答案

之所以有效,是因为

std::ios_base::out | std::ios_base::app & std::ios_base::out | std::ios_base::trunc

==

std::ios_base::out | (std::ios_base::app & std::ios_base::out) | std::ios_base::trunc

==

std::ios_base::out | 0 | std::ios_base::trunc

==

std::ios_base::out | std::ios_base::trunc

这正是您想要的:打开文件进行写入,如果存在则将其截断。

(当然 std::ios_base::trunc 是多余的,如 0x499602d2 所述 - 您可以仅指定 std::ios_base::out)

关于c++ - 以附加模式打开文件但截断文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670559/

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