我正在使用包含文件名行(相对于当前目录)的配置文件移植到控制台程序到Qt.当我在QtCreator中运行/调试GUI时,似乎无法从工作目录加载文件.
假设我的文件系统如下:
C:/MyProjectSource
C:/MyProjectSource-Desktop-Debug // <-- created by QtCreator
C:/MyProjectSource-Desktop-Debug/debug/MyProgram.exe // <- my program
C:/MyProjectSource-Desktop-Debug/debug/params.txt // <- program's config
C:/MyProjectSource-Desktop-Debug/debug/cfg/file1.txt // <- extra file
C:/MyProjectSource-Desktop-Debug/debug/cfg/file2.txt // <- extra file
params.txt看起来像
# other setting
...
cfg/file1.txt # at this line, program crash, saying cannot open file
cfg/file2.txt
...
# other setting
用于读取file1.txt的代码
std::ifstream ifs(filename); // <-- @runtime, filename = 'cfg/file1.txt'
if (!ifs)
{
// failed inside QtCreator, but fine when start from explorer
EMSG_OPENFILE(filename);
exit(-1);
}
基线:如果可能,不要更改控制台程序.那么,如何告诉QtCreator了解相对路径?或者我应该在params.txt中强制执行绝对路径?谢谢.
平台:QtCreator 2.6.1,Qt4.8,MinGW64,Win 7
解决方法:
相对路径是相对于当前工作目录而不是相对于存储可执行文件的目录,因此您需要将当前工作目录更改为可执行目录,只需在main函数后面添加以下行:
QDir::setCurrent(QCoreApplication::applicationDirPath());
如果您需要从Qt Creator设置当前工作目录:
项目 – >运行 – >您将看到工作目录文本框
然后从浏览按钮将此路径更改为可执行位置