Qt как открыть файл в текущем каталоге?или что с этим не так? - PullRequest
5 голосов
/ 19 января 2011

Я пытаюсь открыть файл 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

EDIT

также пробовал с такими же результатами:

Qt::current().path();
Qt::current().absolutePath();

Ответы [ 4 ]

9 голосов
/ 20 января 2011

Попробуйте использовать QCoreApplication :: applicationDirPath () вместо QDir :: currentPath ().

Подробнее см. http://doc.qt.io/qt-5/qcoreapplication.html#applicationDirPath

2 голосов
/ 19 января 2011

Чтобы открыть файл в текущем каталоге, вы просто вызываете конструктор 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 есть поле для Рабочего каталога. Это каталог, который возвращается QDir :: currentPath (), если вы запускаете его через QtCreator.

2 голосов
/ 19 января 2011

Проверьте возвращаемое значение QDir::currentPath(). Я думаю, что когда вы запускаете из Qt Creator, он возвращает путь, где находится файл проекта (* .pro). Когда вы бежите извне, вы получаете путь к двоичному файлу.

Редактировать

Я никогда не работал с Linux. Тем не менее, вы можете попробовать другие функции / комбинации из QDir:

  • QDir :: ток (). Путь ()
  • QDir :: ток (). AbsolutePath ()

и т.д.

1 голос
/ 15 марта 2011

Я нашел это обсуждение, когда искал похожее решение.Я думаю, что самый портативный способ открыть внешний файл с фиксированным именем (без диалогов и участия пользователя) - это использовать Resource System .

В моем случае я создал новый файл ресурсов с префиксом /config и добавил файл (называемый settings.xml).Внутри кода мне не нужно использовать какие-либо функции пути вообще.Вместо этого я использую систему ресурсов.Таким образом, звонок типа QFile file(":/config/settings.xml") работает нормально.Использование QT creator 2.0.1 и QT 4.7 в Windows.

...