C++ Qt如何在当前目录中打开文件?或者什么';这有什么不对?

C++ Qt如何在当前目录中打开文件?或者什么';这有什么不对?,c++,qt,qt-creator,qmake,C++,Qt,Qt Creator,Qmake,我试图在可执行文件的当前位置打开一个xml文件 QString path = QDir::currentPath(); path.append("/acc.xml"); QFile file(path); if(!file.open(QIODevice::ReadOnly)) { insertItem("IO ERR"); } 当我从Qt creator运行它时,一切都正

我试图在可执行文件的当前位置打开一个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();

检查
QDir::currentPath()
的返回值。我认为当您从Qt Creator运行时,它会返回项目文件(*.pro)所在的路径。当您从外部运行时,将获得二进制文件的路径

编辑

我从未使用过Linux。但是,您可以从
QDir
尝试其他功能/组合:

  • QDir::current().path()
  • QDir::current().绝对路径()

等等。

要在当前目录中打开文件,只需调用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);
}
#包括
int main(int argc,字符**argv){
QFile一些_文件(“test.xml”);
如果(!some_file.open(QIODevice::ReadOnly | QIODevice::Text)){

qDebug()尝试使用QCoreApplication::applicationDirPath()而不是QDir::currentPath()


有关详细信息,请参见

我在搜索类似解决方案时发现了此讨论。我认为打开具有固定名称(且不涉及对话框和用户)的外部文件的最便捷方式是使用


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

问题显然来自文档的路径。正确的方法是什么?我已经花了将近2个小时试图从外部了解/理解QT,它是
/home/user/Documents
。但我运行的可执行文件显然不在那里……我实际上需要二进制文件的路径…当我从外部运行它时,不会发生同样的结果。从Qt Creator-OK,Extern-not。@Vic.:在应用程序中使用Qt的windows上,每次应用程序启动时,它都会创建一个目录(如果不存在)二进制文件存在的位置。我回家后会告诉你我是如何做到的。据我记忆所及,它是QDir::current().mkdir(“saves”)。它与Qt Creator一起工作,也与Qt Creator之外的人一样。@Vic://对不起,我使用'QDir().mkdir(_path);'创建目录。我没有使用QtCreator对此进行编码。您能提供更多关于目录结构的详细信息以及复制文件打开错误时运行的确切命令吗?在运行我的项目时,QtCreator似乎执行了某种
魔术
。我正在尝试设计一个GUI应用程序。从
外部
>我通常不带参数运行应用程序,只需
单击
尝试查看QtCreator如何运行它。仅找到:
启动/home/user/Projects/Project build desktop/Project…
Aha,问题是当您单击应用程序时,它从$home运行。如果您想从特定目录运行应用程序,需要d到该目录,然后执行可执行文件的完整路径。QtCreator会自动为您执行此操作。我建议您尝试:1)我发布的获取可执行文件位置的方法2)在QSettings对象中存储查找文件的位置。我自己评论一下,此解决方案可行,但缺点是无法修改XML文件已转换为二进制资源文件。如果需要修改XML内容并执行应用程序而无需重新编译,请使用此处提供的rest解决方案之一。
// Getting directory of the executable
QFileInfo exec_fileinfo(argv[0]);
qDebug() << "Executable is in" << exec_fileinfo.absolutePath();