什么会导致ifstream代码在OS X上失败?

What would cause ifstream code to fail on OS X?

本文关键字:OS 失败 代码 ifstream 什么      更新时间:2023-10-16

我有以下代码

string fileName = "assets/maps/main.json";
std::ifstream file(fileName);
std::string temp;
if(!file.good())
{
    LOG(logERROR) << "Failed to open map file: " << fileName;
    //return;
}
LOG(logDEBUG) << "file Char Count: " << file.gcount();
while(std::getline(file, temp))
{
    mapString += temp;
}
file.close();

这段代码在Windows 8上运行得非常好。当我把这个程序转到OS X上时,文件100%都打不开。或者更简洁地说,file.good()永远不会返回true。我故意注释掉那里的返回,以帮助调试后面的代码。

不管怎样,这已经让我发疯了。我不知道为什么它在OS X上失败了。我尝试了不同的目录,在OS X上重新创建了文件,以确保它不是编码或行尾问题,什么都没有。

我还可以做什么来调试,或者我可以尝试什么替代方法?

我也检查了文件权限本身,它们都很好。我在相同的目录结构中有许多其他类型的文件(图像,音乐,字体),它们都打开得很好,只是这个JSON文件失败了,这个文件的任何新衍生文件也失败了。

当你在Linux或MacOSX上启动一个程序时,工作目录将是用户所在的位置。所以,如果你的游戏需要查找文件,你就需要使用合适的偏好系统。Mac有一个"捆绑包"的概念,它允许一个程序附带数据文件,使用查找它们,你必须学会如何创建一个。你可以看看里面所有的。