C++文件访问错误求助:修改文本单值函数提示文件未打开
问题排查与修复方案
1. 读写文件路径不一致
你的代码中读取文件用了绝对路径:
ifstream file("C:\\C++\\ReturnSum\\x64\\Debug\\leaderboard.txt");
但写入文件时用了相对路径:
ofstream file2("leaderboard.txt");
程序运行的工作目录不一定是C:\\C++\\ReturnSum\\x64\\Debug,这会导致写入时要么找不到文件,要么把文件创建到其他目录,后续读取自然失败。
修复:统一使用绝对路径,确保读写路径一致:
ofstream file2("C:\\C++\\ReturnSum\\x64\\Debug\\leaderboard.txt");
2. 数据类型不匹配
oldScore被定义为int类型,但percInc是double类型,直接比较会导致精度丢失(比如percInc为99.9时,会被当作99和int类型的oldScore对比),逻辑出错的同时也可能引发潜在问题。
修复:将oldScore改为double类型:
double oldScore; file >> oldScore;
3. 错误信息过于模糊
当前代码只输出"Error"或"error",无法定位具体问题(比如路径不存在、权限不足、文件被占用等)。
修复:添加系统错误信息输出,方便精准排查:
if (!file.is_open()) { perror("Failed to open leaderboard.txt for reading"); return; } // 写入时同理 if (!file2.is_open()) { perror("Failed to open leaderboard.txt for writing"); return; }
4. 可选优化:提前确认目录存在
可以在打开文件前检查目标目录是否存在,避免因目录缺失导致文件创建失败:
#include <filesystem> namespace fs = std::filesystem; // 在打开文件前添加 fs::path filePath = "C:\\C++\\ReturnSum\\x64\\Debug\\leaderboard.txt"; if (!fs::exists(filePath.parent_path())) { cerr << "Directory does not exist: " << filePath.parent_path() << endl; return; }
内容的提问来源于stack exchange,提问作者ThomasPoaty
相关产品推荐
相关产品推荐

