laden der einstellungen für ein programm?
-
gibts da schon was womit man aus ner datei einstellungen laden kann
(zbsp zugangsdaten für ne datenbank)
also das die einstellungen ohne compilieren geändert werden könnenich würde das ja selbst schreiben aber wie kann ich alle einstellungen aus der datei für das normale c++ programm aufbereiten
gibts string arrays die als index nen namen haben?
also zbsp: einstellungen[kennwort] = "wert"
wobei kennwort und wert die daten aus der datei wären
-
Kommt darauf an, in was für einer Umgebung du programmierst. KDE hat zum Beispiel Klassen dafür, die alles einfacher machen.
-
Die meisten Programme legen eine Datei im Home Verzeichnis. ~/.progname und schrieben und lesen Daten von dort aus. Ich kenne keine fertige Funktionen (vielleicht QT oder GTK haben sowas oder KDE/Gnome) ansonsten ist dem Programmier überlassen, wie er seine Konfigurationsdateien schreiben will.
-
0xdeadbeef hat mich kürzlich auch auf das hier gebracht, was IMO ganz nett aussieht: http://libconfig.sourceforge.net/
-
ich habs fürs erste selbst gemacht
mit meinen c++ kentnissen sieht das jetzt so aus
klappt übrigens#include <errno.h> #include <syslog.h> #include <string> #include <iostream> #include <fstream> #define LOG 1 // syslog #define MAX 100 using namespace std; class settings { public: void init(string file) { conffile = file; ifstream mysettings(file.c_str()); if (!mysettings) error(file + " kann nicht geoeffnet werden"); string buffer, name, value; int j = 0; while (mysettings) { getline(mysettings, buffer); int i = 0; buffer += '\0'; if (buffer[0]!='#') { while((buffer[i] != '\0')&&(buffer[i] != ' ')) { name += buffer[i]; i++; } i++; while((buffer[i] != '\0')&&(buffer[i] != '\n')) { value += buffer[i]; i++; } mysettinglist[j].name = name; mysettinglist[j].value = value; name = ""; value = ""; j++; } } } string getsetting(string name) { int i = 0; while ((mysettinglist[i].name != name)&&(i<(MAX-1))) i++; if (mysettinglist[i].name==name) return mysettinglist[i].value; else return ""; } string getsetting(string name, int dummy) { int i = 0; while ((mysettinglist[i].name != name)&&(i<(MAX-1))) i++; if (mysettinglist[i].name==name) return mysettinglist[i].value; else error("Kein Eintrag mit dem Namen " + name + " in " + conffile); } private: string conffile; struct settinglist { string name; string value; }; settinglist mysettinglist[MAX]; void error(string fehler) { string errormsg = "ERROR: " + fehler + " " + "[" + strerror(errno) + "]\n"; cout << errormsg; syslog(LOG, errormsg.c_str()); exit(0); } };
verbesserungen, fragen, kritik?
[EDIT] weitere methode eingefügt um bei nicht existieren eines eintrages ne fehlermeldung auszugeben und das programm zu beenden