尝试访问我制作的文件时不断出现错误

问题描述 投票:0回答:2

我创建了一个函数来更改文本文件中的单个值。但是,当我运行程序时,出现错误,指示该文件从未打开。

我不认为我的程序中的逻辑是错误的,所以我的第二个想法是我的文本将位于错误的文件中(我已在函数的第一行中指定了文本文件的位置)。

所以,我不确定我哪里出了问题,而且对我来说,这一定是非常愚蠢和简单的发现。

谁能指点一下吗?我需要第二双眼睛。

void leaderboard(double percInc, int  currChips, int oldChips) {

    // compare old high score to new one
    ifstream file("C:\C++\ReturnSum\x64\Debug\leaderboard.txt");

    if (!file.is_open()) {
        cerr << "Error" << endl; 
        return; 
    }

    int oldScore; 
    file >> oldScore; 
    file.close();

    // write new highscore 
    if (percInc > oldScore) {
        ofstream file2("leaderboard.txt"); 
            if (!file2.is_open()) {
                cerr << "error"; 
                return;
            }
            file2 << percInc << endl;
            file2.close();
            cout << "NEW HIGH SCORE";
    }
    else {
        cout << "No high score today. ";
        
    }
}
c++ file
2个回答
0
投票

您没有转义传递给

std::ifstream
构造函数的路径中的反斜杠,因此它们被错误地解释为 转义序列。具体来说,
\x64
将被解释为十六进制序列。

您应该在路径中的每个反斜杠前面添加另一个反斜杠

\
,如下所示:

ifstream file("C:\\C++\\ReturnSum\\x64\\Debug\\leaderboard.txt");

0
投票

您的文件路径字符串包含未转义的

\
字符。你需要逃离他们。

此外,您使用绝对路径打开文件进行读取,然后使用相对路径打开文件进行写入。有可能,您的工作目录不是您所期望的,因此您最终会尝试写入不存在或您无权访问的文件。

试试这个:

void leaderboard(double percInc, int  currChips, int oldChips) {

    std::string filename = "C:\\C++\\ReturnSum\\x64\\Debug\\leaderboard.txt";

    // compare old high score to new one
    ifstream file(filename);
    if (!file.is_open()) {
        cerr << "Error opening file for reading" << endl; 
        return; 
    }

    int oldScore; 
    if (!(file >> oldScore)) {
        cerr << "Error reading file" << endl; 
        return; 
    }
    file.close();

    // write new highscore 
    if (percInc > oldScore) {
        ofstream file2(filename);
        if (!file2.is_open()) {
            cerr << "Error creating file for writing" << endl;
            return;
        }

        if (!(file2 << percInc << endl)) {
            cerr << "Error writing file" << endl; 
            return; 
        }
        file2.close();

        cout << "NEW HIGH SCORE";
    }
    else {
        cout << "No high score today. ";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.