2014-05-07 47 views
0

我有以下代码什么会导致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文件失败,并且此文件的任何新派生也失败。

+0

您是否尝试过使用文件的完整路径?它会查看你的(当前工作目录)/assets/maps/main.json文件 – GWW

+0

嗨,完整的路径工作...但这是一个游戏,将安装在他们选择的目录中的人民电脑上..什么是动态检测完整路径的好策略?会采取任何其他的想法。为了记录,我也尝试了类似./path/to/file这样的功能。我提到的代码中的所有其他文件都使用类似于上面的路径访问 –

+0

您可以从源代码树所在的目录运行该程序。更好的想法可能是在配置文件中包含游戏路径。 – GWW

回答

0

在Linux或MacOSX上启动程序时,工作目录将位于用户所在的位置。所以,如果你的游戏需要找到文件,你需要使用适当的偏好系统。 Mac有一个'捆绑'的概念,允许程序带有数据文件并使用它们,你必须学习如何创建一个。您可以在许多示例中查看/ Applications目录中的所有'.app'目录。

+0

我明白这一点,但为什么同一目录中的其他25个文件全部读取都没有问题,并且具有相同数量的相对路径信息? –

相关问题