我创建了一个函数来更改文本文件中的单个值。但是,当我运行程序时,出现错误,指示该文件从未打开。
我不认为我的程序中的逻辑是错误的,所以我的第二个想法是我的文本将位于错误的文件中(我已在函数的第一行中指定了文本文件的位置)。
所以,我不确定我哪里出了问题,而且对我来说,这一定是非常愚蠢和简单的发现。
谁能指点一下吗?我需要第二双眼睛。
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. ";
}
}
您没有转义传递给
std::ifstream
构造函数的路径中的反斜杠,因此它们被错误地解释为 转义序列。具体来说,\x64
将被解释为十六进制序列。
您应该在路径中的每个反斜杠前面添加另一个反斜杠
\
,如下所示:
ifstream file("C:\\C++\\ReturnSum\\x64\\Debug\\leaderboard.txt");
您的文件路径字符串包含未转义的
\
字符。你需要逃离他们。
此外,您使用绝对路径打开文件进行读取,然后使用相对路径打开文件进行写入。有可能,您的工作目录不是您所期望的,因此您最终会尝试写入不存在或您无权访问的文件。
试试这个:
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. ";
}
}