我正在使用Ubuntu 14.04中的Qt Creator 3.1.1编写C ++程序。此代码使用现有库从磁盘加载文件,方法是将表示路径的字符串传递给该文件。我遇到的麻烦是当字符串表示绝对路径时,文件加载正常,但是当字符串表示相对路径时,它无法加载,说它找不到文件。
我的项目包含/home/karnivaurus/project/src
的源文件,并在/home/karnivaurus/project/build
构建文件。我在每个目录中以及项目根目录mesh.stl
中放置了文件/home/karnivaurus/project
的副本。但是当我传递字符串../src/mesh.stl
,../build/mesh.stl
或../mesh.stl
时,它无法加载。它也因/../src/mesh.stl
,/../build/mesh.stl
和../src/mesh.stl
,../build/mesh.stl
或../mesh.stl
而失败。
但是,如果我传递字符串/home/karnivaurus/project/src/mesh.stl
,/home/karnivaurus/project/build/mesh.stl
或/home/karnivaurus/project/mesh.stl
,它会找到该文件。
这是为什么?我对C ++中相对路径的理解是一个问题吗?或者是我需要在Qt Creator中配置的东西?在我的Qt Creator设置中,我将工作目录设置为/home/karnivaurus/project/build
。
我用来加载网格的确切行是:
const aiScene* mesh = MeshLib::loadMesh("../mesh.stl");
相应的错误消息是:
Failed opening file '/mesh.stl' for reading: No such file or directory
此错误消息对我来说是可疑的,因为/mesh.stl
不等同于../mesh.stl
...
答案 0 :(得分:1)
看起来您已经确定工作目录是正确的。鉴于这种可能性已被消除,剩下的就是第三方库中的错误。
您可以使用Qt构建绝对路径:
QString meshPath = QDir().filePath("../mesh.stl");
const aiScene* mesh = MeshLib::loadMesh(meshPath.toLatin1().data());
这可以作为解决方案,直到库的开发人员修复错误。