Qt如何在当前的dir中打开一个文件? 或者这有什么问题?

问题描述 投票:6回答:4

我想在当前可执行文件的位置打开一个xml文件。

        QString path = QDir::currentPath();
        path.append("/acc.xml");
        QFile file(path);

        if(!file.open(QIODevice::ReadOnly))
        {
            insertItem("IO ERR");
        }
  • 当我从Qt creator运行它时,一切都正常。currentPath() 返回可执行文件的文件夹路径。

  • 我去的时候 project-build-desktop/ 文件夹,并尝试手动运行它 currentPath() 返回 /home/user/Documents

编辑

也尝试了同样的结果。

Qt::current().path();
Qt::current().absolutePath();
c++ qt qt-creator qmake
4个回答
10
投票

尝试使用QCoreApplication::applicationDirPath()代替QDir::currentPath()。

详情请看 http:/doc.qt.ioqt-5qcoreapplication.html#applicationDirPath。


2
投票

检查返回的 QDir::currentPath(). 我想当你从Qt Creator运行时,它返回的是项目文件(*.pro)所在的路径。当你从外部运行时,你得到的是二进制文件的路径。

编辑

我从来没有在Linux下工作过。然而,你可以尝试其他的函数组合,从 QDir:

  • QDir::current().path()
  • QDir::current().absolutePath()

等。


2
投票

要打开当前目录下的文件,你只需调用QFile构造函数

我在我的Linux机器上测试了一下,它的工作原理是这样的

#include <QtCore>

int main(int argc, char** argv){
    QFile some_file("test.xml");
    if(!some_file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "Unable to open file";
    } else {
        qDebug() << "File open successfully";
    }
    exit(-1);
}

我运行.TestQFile,如果在当前目录下有test.xml,就可以了。

更新:我注意到你的问题的措辞中说你希望文件与可执行文件在同一目录下,这可以按照以下方式进行。

// Getting directory of the executable
QFileInfo exec_fileinfo(argv[0]);
qDebug() << "Executable is in" << exec_fileinfo.absolutePath();

更新2:在QtCreator的项目面板下,有一个工作目录的字段。如果你是通过QtCreator来运行的话,这就是QDir::currentPath()返回的目录。


2
投票

我在搜索类似的解决方案时发现了这个讨论。我认为,打开一个有固定名称的外部文件(没有对话框和用户参与)的最便携的方法是使用 资源系统.

在我的例子中,我创建了一个新的资源文件,前缀是 /config 并添加了该文件(称为 settings.xml). 在代码里面,我根本不需要使用任何路径函数。我使用资源系统来代替。因此,像这样的调用 QFile file(":/config/settings.xml") 工作正常。在Windows上使用QT creator 2.0.1和QT 4.7。

© www.soinside.com 2019 - 2024. All rights reserved.