Werte speichern, wie am besten?

MaRlik

Mitglied
Hallöchen,

ich bin gerade an der Arbeit ein Programm mit grafischer Oberfläche in C++ zu schreiben. Gewissen Werte wie ein Pfad zu einer Datei usw soll auch nach dem erneuten öffnen des Programms vorhanden sein, müssen also zwischengespeichert werden.

Was empfiehlt sich hier? Wie Speichern? Was für Dateiformate könnt ihr einem raten?

Ich selbst hab bisher damit noch keine Erfahrungen gesammelt, daher bin ich für jeden Rat dankbar!
 
Hallöchen auch,
da gibt es vielfältige Möglichkeiten. Wenn die Werte von der Menge her klein sind, könnte man sie z.B. in der Registry ablegen (vorausgesetzt, du arbeitest unter Windows).

Bei einer Datei muss dein Programm wissen, unter welchem Pfad es diese nach Programmstart findet. Beispielsweise könnte man sie im Verzeichnis ablegen, wo das exe liegt. Dann kannst du im Programm mit GetModuleFileName() das Verzeichnis ermitteln.

Den Inhalt der Datei kannst du frei gestalten. Am einfachsten ist lesbarer Text mit 1 Parameter pro Zeile, z.B.:
Code:
c:\temp\bärtiger.dat
2
Hier würde dein Programm dann wissen müssen, was in Zeile 1 und 2 jeweils steht.

Ich vermute mal, wenn du schon Grafik programmierst, sind die stream-Klassen längst bekannt, mit denen du die Datei liest und schreibst.
 
Huhu,

danke schonmal für die Antwort. Mit Speicher und Ablegen mit einem Wert pro Zeile sollte ich hinbekommen. Passt denke ich.

Andere Programme hab ich gesehen,legen ihre Parameter in einer *.xml datei ab. Macht sowas sinn? Wäre das ein großer Aufwand des auslesen/parsen dann wieder?

Hat der ggf wer ein Tutoriel zu oder ähnliches?
 
Wenn du Daten hierarchisch gliedern musst, macht XML Sinn. Ich kenn mich aber wenig damit aus. Weitere Infos evtl. unter tutorials.de/programming/xml.
 
Hi.

XML wäre eine auch eine gute Idee falls die Datei von anderen Programmen gelesen werden soll.

Anwendungseinstellungen solltest du allerdings lieber in der Registry speichern. Einstellungen für jeden Benutzer getrennt dann natürlich auch unterhalb des HKEY_CURRENT_USER Schlüssels.

Wenn du dein Programm allerdings portabel halten willst kommt das eher nicht in frage. Dann wähle lieber ein Textformat was du entweder selbst verarbeitest oder du suchst dir eine Bibliothek (z.B. http://www.hyperrealm.com/libconfig/) dafür.

Gruß
 
Klingt ganz gut. Ich scheiter jedoch daran den parser einzubinden. Ich habe hier C++ Builder 2009 von Codegear, bekomme es jedoch leider nicht hin.

Kann wer ggf Hilfestellung geben?
 
Ich habe in dem Projekt probiert bei der Projektverwaltung unter Build-Konfiguration probiert die geforderten Parameter anzugeben, hat aber leider nicht geklappt.

Siehe Fehlermeldung:
Code:
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Config::~Config()' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Config::Config()' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Config::readFile(const char *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Config::lookup(const char *) const' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Setting::operator long() const' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Setting::operator =(long)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ
[ILINK32 Fehler] Error: Nicht auflösbares externes 'libconfig::Config::writeFile(const char *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\BV\DESKTOP\LIBCONFIG-1.3.2\SAMPLES\C++\DEBUG_BUILD\SAMPLE1.OBJ

Ehrlich gesagt weiß ich nicht genau wie ich es nun Einstellen muss, dass der Linker das richtig versteht. In dem Handbuch das ich habe, konnte ich leider auch nichts entsprechendes finden :(
 
Zurück