gpt4 book ai didi

c++ - 使用 ios::ate 写入 ofstream 会覆盖现有文件

转载 作者:行者123 更新时间:2023-12-01 14:25:08 28 4
gpt4 key购买 nike

我试图将一系列矩阵作为 CSV 附加到磁盘,并发现使用 ios::ate 会覆盖以前创建的任何现有文件。为了通过一个简化的模型来说明这个问题,对下面的函数 write_nums() 的第二次调用会导致在第一次调用中写入的任何数据丢失。有没有办法来解决这个问题?
之前在 ofstream open modes: ate vs app 中给出的这个问题的解决方案似乎不是最佳的,因为它只有在输出所指向的文件已经存在的情况下才有效。

void write_nums()
{
std::ofstream out_file;

out_file.open("test.txt", std::ofstream::ate);
if (!out_file.good())
{
std::cerr << "Error while opening output file!" << '\n';
}
out_file.seekp(0, std::ios::end);
out_file << "{";
for (int i = 0; i < 10; ++i)
{
out_file << i << ',';
}
out_file.seekp(-1, std::ios::end);
out_file << "}";
}

最佳答案

std::ofstream::ate截断现有文件。 answers其中之一对于您链接的问题也提到了它,您必须结合atein以避免截断。使用 app不会让你玩寻找。


void write_nums()
{
std::ofstream out_file("test.txt", std::ofstream::ate | std::ofstream::in);
if (!out_file.good())
{
std::cerr << "Error while opening output file!" << '\n';
}
out_file.seekp(0, std::ios::end);
out_file << "{";
for (int i = 0; i < 10; ++i)
{
out_file << i << ',';
}
out_file.seekp(-1, std::ios::end);
out_file << "}";
}

关于c++ - 使用 ios::ate 写入 ofstream 会覆盖现有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62893333/

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