I'm trying to open an xml file in the current location of the executable
QString path = QDir::currentPath();
path.append("/acc.xml");
QFile file(path);
if(!file.open(QIODevice::ReadOnly))
{
insertItem("IO ERR");
}
When I run it from Qt creator, everything works.
currentPath()
returns the path to the executable's folderWhen I go to
project-build-desktop/
folder and try to run it manuallycurrentPath()
returns/home/user/Documents
EDIT
also tried with same results:
Qt::current().path();
Qt::current().absolutePath();
I found this discussion while searching for a similar solution. I think that the most portable way of opening an external file that has a fixed name (and no dialogs and the user are involved) is to use the Resource System.
In my case I created a new resource file with the prefix
/config
and added the file (calledsettings.xml
). Inside the code, I don't need to use any path functions at all. I use the resource system instead. Thus a call likeQFile file(":/config/settings.xml")
works fine. Using QT creator 2.0.1 and QT 4.7 on Windows.To open a file in the current directory, you simply call QFile constructor
I tested this on my Linux machine and it works
I run ./TestQFile and if there is a test.xml in the current directory, it works.
UPDATE: I notice that the wording of your question says that you want the file in the same directory as the executable, this can be done as follow:
UPDATE 2: Under the project panel of QtCreator, there is a field for Working Directory. This is the directory that is returned by QDir::currentPath() if you are running it via QtCreator.
Try to use QCoreApplication::applicationDirPath() instead of QDir::currentPath().
For details see http://doc.qt.io/qt-5/qcoreapplication.html#applicationDirPath
Check the returned value of
QDir::currentPath()
. I think when you run from Qt Creator, it returns the path where the project file (*.pro) is located. When you run from outside, you get path of the binary.Edit
I never worked with Linux. However, you can try other functions/combinations from
QDir
:etc.