Save values to a config file
-
@Sucharek said in Save values to a config file:
my preapptasks.cpp
So how does this compare to what is in your
preapptasks.h
? -
@JonB Ok, so I added
copyIniToDestDir();
getDestIniFile();
to the .h file, but I'm not sure what to declare there (err message: C++ requires a type specifier for all declarations).
I'm also having a problem with declaring the File variable.
On
QFile *orgFile = new File(":/config/config.ini");
when I try to declare it in the .h file (QFile File;), it doesn't fix the error message (unknown type name 'File'). -
@JonB Ok, so I added
copyIniToDestDir();
getDestIniFile();
to the .h file, but I'm not sure what to declare there (err message: C++ requires a type specifier for all declarations).
I'm also having a problem with declaring the File variable.
On
QFile *orgFile = new File(":/config/config.ini");
when I try to declare it in the .h file (QFile File;), it doesn't fix the error message (unknown type name 'File'). -
Hi, so I've looked into it, and fixed almost all errors, except the "unknown type name 'File'".
I still can't figure out how to fix that one. -
@Sucharek
I don't know whether the other C++ experts would concur (comments always welcome!), but if you are intending to putQFile *orgFile = new QFile(":/config/config.ini");
in the class member variables declaration in the
.h
file, I wouldn't. I would suggest such an initialisation (i.e. thenew ...
part) belongs better in the class constructor. -
@Sucharek
I don't know whether the other C++ experts would concur (comments always welcome!), but if you are intending to putQFile *orgFile = new QFile(":/config/config.ini");
in the class member variables declaration in the
.h
file, I wouldn't. I would suggest such an initialisation (i.e. thenew ...
part) belongs better in the class constructor.@JonB
As long as it works, I'm good with it.I also find interesting that in this part of the code:
if(orgFile){ if(destFile && destFile->exists()){ qDebug() << "exists"; } else {
If i change the resource prefix, or the config.ini name, it will STILL print "exists".
I also have another question. How do I write and read the file, now that the code probably works? -
@JonB
As long as it works, I'm good with it.I also find interesting that in this part of the code:
if(orgFile){ if(destFile && destFile->exists()){ qDebug() << "exists"; } else {
If i change the resource prefix, or the config.ini name, it will STILL print "exists".
I also have another question. How do I write and read the file, now that the code probably works?@Sucharek https://doc.qt.io/qt-5/qfile.html is what you need.
Please learn at least the absolute basics of C++ (and Qt while we're at it - both are very well documented), if your intention is to make it work by using the code snippets provided by the others you'll get nowhere in the long run.
-
@Sucharek https://doc.qt.io/qt-5/qfile.html is what you need.
Please learn at least the absolute basics of C++ (and Qt while we're at it - both are very well documented), if your intention is to make it work by using the code snippets provided by the others you'll get nowhere in the long run.
Hi, so I've looked into it and I can read from the file, but can't write.
I've tried multiple methods, but they don't seem to work.
my .cpp file:#include "preapptasks.h" QFile *orgFile; PreAppTasks::PreAppTasks() { } QFile *PreAppTasks::getDestIniFile() { //in your case: return new QFile(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QString("/config/config.ini")); } void PreAppTasks::copyIniToDestDir() { orgFile = new QFile(":/config/config.ini"); QTextStream in(orgFile); QFile *destFile = getDestIniFile(); //QFile *orgFile = getOrgIniFile(); //in your case simply: if(orgFile){ if(destFile && destFile->exists()){ orgFile->open(QIODevice::ReadOnly | QIODevice::Text); qDebug() << orgFile->isOpen(); QString line = in.readLine(); qDebug() << line; orgFile->close(); orgFile->open(stdin, QIODevice::ReadWrite | QIODevice::Text); qDebug() << orgFile->isOpen(); orgFile->write("a"); line = in.readLine(); qDebug() << line; orgFile->close(); } else { //DestFile does not exist (propably the first program execution) -> simply copy from install folder //But first, create the folder, if it does not exist QFileInfo info(destFile->fileName()); info.setFile(info.absolutePath()); if(!info.exists()){ QDir d; d.mkpath(info.absoluteFilePath()); } orgFile->copy(destFile->fileName()); } } if(destFile){ destFile->deleteLater(); destFile = nullptr; } if(orgFile){ orgFile->deleteLater(); orgFile = nullptr; } }
So, in
if(destFile && destFile->exists()){ ... }
I tried to read the contents of the file (currently 50), which worked, but writing doesn't.
EDIT: Also, when I try to read the line on ReadOnly mode, it works, but in ReadWrite mode, it doesn't even print anything.P. S.: I'm sorry that you have to deal with me, but I just want to get this to work.
-
Hi, so I've looked into it and I can read from the file, but can't write.
I've tried multiple methods, but they don't seem to work.
my .cpp file:#include "preapptasks.h" QFile *orgFile; PreAppTasks::PreAppTasks() { } QFile *PreAppTasks::getDestIniFile() { //in your case: return new QFile(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QString("/config/config.ini")); } void PreAppTasks::copyIniToDestDir() { orgFile = new QFile(":/config/config.ini"); QTextStream in(orgFile); QFile *destFile = getDestIniFile(); //QFile *orgFile = getOrgIniFile(); //in your case simply: if(orgFile){ if(destFile && destFile->exists()){ orgFile->open(QIODevice::ReadOnly | QIODevice::Text); qDebug() << orgFile->isOpen(); QString line = in.readLine(); qDebug() << line; orgFile->close(); orgFile->open(stdin, QIODevice::ReadWrite | QIODevice::Text); qDebug() << orgFile->isOpen(); orgFile->write("a"); line = in.readLine(); qDebug() << line; orgFile->close(); } else { //DestFile does not exist (propably the first program execution) -> simply copy from install folder //But first, create the folder, if it does not exist QFileInfo info(destFile->fileName()); info.setFile(info.absolutePath()); if(!info.exists()){ QDir d; d.mkpath(info.absoluteFilePath()); } orgFile->copy(destFile->fileName()); } } if(destFile){ destFile->deleteLater(); destFile = nullptr; } if(orgFile){ orgFile->deleteLater(); orgFile = nullptr; } }
So, in
if(destFile && destFile->exists()){ ... }
I tried to read the contents of the file (currently 50), which worked, but writing doesn't.
EDIT: Also, when I try to read the line on ReadOnly mode, it works, but in ReadWrite mode, it doesn't even print anything.P. S.: I'm sorry that you have to deal with me, but I just want to get this to work.
@Sucharek said in Save values to a config file:
I'm sorry that you have to deal with me, but I just want to get this to work.
Don't worry, we all started somewhere sometime.
And I brought this path up, so I'll see it finished :P
Give me a some time, I'll make an working example
-
@Sucharek said in Save values to a config file:
I'm sorry that you have to deal with me, but I just want to get this to work.
Don't worry, we all started somewhere sometime.
And I brought this path up, so I'll see it finished :P
Give me a some time, I'll make an working example
-
@Sucharek
here ya go:https://github.com/DeiVadder/PersistentConfigIni.git
Interestingly enough, I found a bug in my old code.
It wasn't necessary that I changed the config file so I never noticed. But one has to change the permission of the copied file to also be writeable. Since it's copied from a read only directory and that property carries over.🤷♂️
-
@Sucharek
here ya go:https://github.com/DeiVadder/PersistentConfigIni.git
Interestingly enough, I found a bug in my old code.
It wasn't necessary that I changed the config file so I never noticed. But one has to change the permission of the copied file to also be writeable. Since it's copied from a read only directory and that property carries over.🤷♂️