QT系列——工作目录

举报
小糖饼最甜呀 发表于 2022/04/03 14:36:54 2022/04/03
【摘要】 写了一个demo程序,用于打开一个文本文件demo.txt,该文件存放于执行程序所在的目录。打开文件的代码示例如下:// 代码QFile file(“demo.txt”);if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ // read}else{ // error}结果发现:程序可以编译成功,且生成exe执行程序。直接启...

写了一个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
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。