ich hab ein kleines Problem und komm nicht mehr weiter.
Ich wollte mit Hilfe von QSettings einstellungen meiner Anwendung in einer Inidatei abspeichern und laden. Inclusive einer Prüfung ob sich die zu speichernden Daten seit dem letzten Abspeichern geändert haben.
Mein Problem ist nun wenn die ini Datei zum Beispiel schreibgeschützt ist.
Mein Vergleich zwischen den gespeicherten und den aktiven daten beim ersten durchlauf korrekt ist aber beim 2 durchlauf nicht mehr korrekt ist.
Testdatei (schreibgeschützt)
test.ini:
[General]
testvalue=test
fehlerhafte Funktion:
Code: Alles auswählen
void Main::testsetting()
{
mysetting=new QSettings("test.ini",QSettings::IniFormat);
if(mysetting->value("testvalue").toString()==testvalue) //wird beim 2. Aufruf durchlaufen
{
QMessageBox::information(this,"Check","Testvalue="+testvalue+ " ist gleich dem gespeicherten wert="+mysetting->value("testvalue").toString(),QMessageBox::Ok);
}
else //wird beim 1. Aufruf korrekt durchlaufen
{
QMessageBox::information(this,"Check","Testvalue="+testvalue+ " ist ungleich dem gespeicherten wert="+mysetting->value("testvalue").toString(),QMessageBox::Ok);
}
mysetting->setValue("testvalue",testvalue);
mysetting->sync();
if(mysetting->status() ==QSettings::NoError) QMessageBox::information(this,"Save","Speichern erfolgreich",QMessageBox::Ok);
else QMessageBox::information(this,"Save","Speichern nicht erfolgreich",QMessageBox::Ok);
delete mysetting;
}
Und beim 2. Aufruf neu erzeuge und da die Datei schreibgeschützt ist unverändert neu lade.
Scheint er intern irgendwie auf den im ersten Versuch erzeugten Filesstream zuzugreifen in den die Änderungen gespeichert aber nicht auf das Orginalfile zurückgeschrieben wurde zuzugreifen.
Was bedeuten würde das wenn ich ein neues Qsetting Objekt erstelle mit Zugriff auf ein File das vorher versucht wurde zu Speichern, ich in dem neuen QSetting Objekt einen inkonsistenten Datensatz lade.
Effekt tritt unter Linuxumgebung wie auch unter Windows auf.
Benutze Version QT4.7
Komplettes Beispiel im Anhang.