所以。。。有没有办法阻止文件自动清除?(C++)

So...is there a way to stop files from clearing automatically? (c++)

提问人:Menelaus 提问时间:10/3/2020 最后编辑:πάντα ῥεῖMenelaus 更新时间:10/3/2020 访问量:271

问:

所以我正在制作一个非常简单的猜谜控制台游戏,我想将数据永久存储在一个文件中(highscore)。但是,每次我编译我使用的文件时都会清空自己。有什么办法可以阻止吗? 我尝试了很多没有用的东西,老实说我不知道问题出在哪里。我猜这与鳍和鳍有关,但对于其他人来说,它似乎有效

#include <iostream>
#include <fstream>
#include <time.h>
#include <conio.h>

int hs;

//this would be the play_game() function, unrelated to the subject

int main()
{
    std::ofstream fout;
    fout.open("HS.txt");

    std::ifstream fin;
    fin.open("HS.txt");

    srand(time(NULL));

    //menu with 4 options, play, quit, help and highscore (which i'm working on)

    fin.close();
    fout.close();
}


   
C++ Fstream IOstream(英语:IOSTREAM)

评论

1赞 πάντα ῥεῖ 10/3/2020
检查 std::fstream::open()、参数,具体来说。modestd::ios::app
0赞 einpoklum 10/3/2020
@πάνταῥεῖ:这个问题不是重复的,因为OP不只是想追加,他们既想读又写。
0赞 Giogre 10/3/2020
正如 Panta Rei 所说,将您的命令修改为fout.openfout.open ("HS.txt", std::ofstream::out | std::ofstream::app);
0赞 πάντα ῥεῖ 10/3/2020
@Menelaus要处理来自同一文件资源的读取和写入,只需使用一个 ,否则您需要使用相同的指针同步 和 via。std::fstreamfoutfinrdbuf()

答:

0赞 einpoklum 10/3/2020 #1

不要将文件与两个流并行打开两次。此外,简单的打开写入不会截断您的文件,但会将您置于文件的开头,因此您将覆盖现有数据;看这个问题。您必须使用写入模式打开文件。

您需要:

  1. 打开文件进行输入和输出 - 并且不截断它;请参阅:
    将输出文件同时作为输入和输出打开是什么意思? ,或
  2. 仅在应用启动时打开文件进行读取,并在应用存在时打开文件进行写入和写入(或每隔一段时间写入一次,以提高复原能力)。