QT系列——工作目录
写了一个demo程序,用于打开一个文本文件demo.txt,该文件存放于执行程序所在的目录。
打开文件的代码示例如下:
// 代码
QFile file(“demo.txt”);
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
// read
}
else
{
// error
}
结果发现:
程序可以编译成功,且生成exe执行程序。
直接启动exe,文件可以正常打开。
在编译器调试启动程序,发现竟然报错了,原因是:error "系统找不到指定的文件。
这是为什么呢?
这是因为当前路径在上述不同的操作下是不一样的,若是当前路径不在程序执行文件所在目录时,文件自然无法找到,就会报错。
我们通过代码获取一下当前工作路径和文件路径,分析一下原因,为什么文件找不到。
通过Qt程序打印以下两个路径,显示在界面上:
// 文件路径
QFileInfo info(“demo.txt”);
info.absolutePath();
// 当前路径
QDir::currentPath();
// 可执行程序路径
QApplication::applicationDirPath();
按照以下三种方式,多次启动程序:
以QT编译器直接运行或者调试运行的方式启动;
以直接双击打开exe的方式启动;
以命令行启动方式启动;
根据输出结果,发现:
info.absolutePath();三种方式,打印路径内容随启动方式变化而不同;
QDir::currentPath();三种方式,打印路径内容随启动方式变化而不同;但路径与文件路径一致;
QApplication::applicationDirPath();三种方式,打印路径内容一致,未发生变化;路径与文件路径不一致;
总结:
-
程序所在路径打印内容一致;
-
当前目录打印内容不一致,变化如下:
1)在Qt编译器下直接运行或者调试运行,则当前的工作目录就是项目配置的构建目录;
2)直接双击生成的exe程序运行,则当前工作目录就是该可执行文件所在的目录;
3)当在命令行下运行exe程序,则当前目录就是运行程序时在命令行所在的那个目录;
如此可见,当前目录是不固定的。 -
文件默认路径是当前目录的路径。
最后:
为了编译出来的程序,可以在不同的启动方式下都可以正常运行,建议使用可执行文件所在目录作为基础,增加相对路径,用于仿真所需文件。
可执行文件所在目录:
QApplication::applicationDirPath();
代码示例如下:
QFile file(QApplication::applicationDirPath() +“/demo.txt”);
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
// read
}
else
{
// error
}
- 点赞
- 收藏
- 关注作者
评论(0)