[Interest] Issue using QSettings INI format on Windows
smurphy at walbro.com
Fri Feb 8 23:56:12 CET 2019
> Hi, just tested your example program in MSVC 2017 Qt 5.12.1 and it fails
> as well.
> But a simple fix is just to make sure that the QFile file isn't open at
> the same time as you write out the settings to it.
> I.e. in your example program, it suffices to move that first
> file.close(); up to just before the "// write out via QSettings" comment
> line is, then it runs flawlessly.
> But perhaps that's not possible to keep those writes separate in time in
> your "real" app that your porting?
Thanks for testing!
Yes, I discovered that issue as well, and then forgot to post a follow-up
here. Where I had trouble, and something I did differently in the real
app vs. the minimal example, is that the file I was trying to use to write
the settings to was a QTemporaryFile. I stumbled across the same fix you
did in the example, but that fix never seemed to work in my real app with a
QTemporaryFile. After testing, I believe that is because the QSettings
object is trying to open the associated settings file with write permissions,
and it isn't able to acquire them. In my example, it was because I already
had opened the file with write permissions (mistakenly thinking I needed
to do that before all the QSettings stuff). In my real app, I think that it
must be because QTemporaryFile holds a lock on the file so it can
remove it when the QTemporaryFile object goes out of scope, and
therefore the QSettings object gets an access error because the file is
already in use.
What I'm actually trying to accomplish is far more simple: I don't actually
want an INI file, I just want to get data that I've put into a QSettings object
written to a QString, in the INI file format. I couldn't see any other way to
do that than to write it out to a file, then read the file contents back into
a QString. So if you see a simpler solution for that, I'm open to suggestions!
In my real app, I've solved it by using removing the QTemporaryFile
object, and just letting QSettings do its thing, writing to a file. Then when
the file has been written, I read it back in to a QString, and delete the file
since I have no further use for it.
This message has been scanned for malware by Forcepoint. www.forcepoint.com
More information about the Interest