我有以下代码什么会导致ifstream代码在OS X上失败?
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文件失败,并且此文件的任何新派生也失败。
您是否尝试过使用文件的完整路径?它会查看你的(当前工作目录)/assets/maps/main.json文件 – GWW
嗨,完整的路径工作...但这是一个游戏,将安装在他们选择的目录中的人民电脑上..什么是动态检测完整路径的好策略?会采取任何其他的想法。为了记录,我也尝试了类似./path/to/file这样的功能。我提到的代码中的所有其他文件都使用类似于上面的路径访问 –
您可以从源代码树所在的目录运行该程序。更好的想法可能是在配置文件中包含游戏路径。 – GWW