在 Qt Creator 中加载具有相对路径的文件
Posted
技术标签:
【中文标题】在 Qt Creator 中加载具有相对路径的文件【英文标题】:Loading a file with a relative path in Qt Creator 【发布时间】:2016-02-17 17:03:55 【问题描述】:我正在 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
...
【问题讨论】:
您能否验证运行时的工作文件夹确实是您在此处假设的项目文件夹?一种方法是将文件写入路径./dummy.txt
,然后查看文件的创建位置。
我尝试将文件写入dummy.txt
,它按预期将其写入/home/karnivaurus/project/build/dummy.txt
。 (与./dummy.txt
相同)
您究竟是如何加载 .stl 文件的?您可以分享您尝试打开文件的代码行吗?
该行是:const aiScene* mesh = MeshLib::LoadMesh("mesh.stl");
,或const aiScene* mesh = MeshLib::LoadMesh("../build/mesh.stl");
等...
这很奇怪。我会查看LoadMesh
,看看他们是否对给定的文件路径做了什么特别的事情......你也试过./../build/mesh.stl
吗?
【参考方案1】:
看起来您已经确定工作目录是正确的。鉴于消除了这种可能性,剩下的就是 3rd 方库中的一个错误。
你可以使用Qt构造一个绝对路径:
QString meshPath = QDir().filePath("../mesh.stl");
const aiScene* mesh = MeshLib::loadMesh(meshPath.toLatin1().data());
在库的开发人员修复错误之前,这可以作为解决方法。
【讨论】:
或者您可以使用QDir().absoluteFilePath("../mesh.stl")
将绝对路径传递给MeshLib。以上是关于在 Qt Creator 中加载具有相对路径的文件的主要内容,如果未能解决你的问题,请参考以下文章