Binäre Trennzeichen

Thomasio

Erfahrenes Mitglied
Ich versuche krampfhaft meiner Anwendung eine config.ini oder config.dat zu geben, wo eine Menge von Einstellungen und Daten aus der Anwendung gespeichert werden sollen.
Das kann ein Stück Text sein, oder eine Zahl, oder auch ein ganzes struct oder ein vector von structs.

Damit ich nun nicht die Daten immer in derselben Reihenfolge haben muss, weil sich das ja später noch ändern könnte, bzw. weitere Sachen dazu kommen könnten, will ich jedem Eintrag eine Codenummer oder sowas verpassen.
Ich weiss, wie ich das Ganze lösen kann, wenn die Daten als Text gespeichert werden, ich weiss auch, wie ich binäre Daten schreiben und lesen kann, aber ich weiss nicht, ob und wie ich beides in einer Datei mischen kann.

Beispiel:

Code:
wstring MyText = L"Irgendwas";
int MyValue = 17;
LOGFONT MyFont = {....};
COLORREF MyColor = RGB(0,0,0);
vector<MyStruct>MyVector;

// usw. usw.

In der config.dat sollte also z.B. stehen:

1 MyText
2 MyFont
3 MyVector
usw.

Natürlich braucht das Ganze Trennzeichen, die im Inhalt nicht vorkommen, Leerstellen und Zeilenumbrüche eigenen sich dafür nicht, aber wie macht man binäre Trennzeichen?

Mein grösstes Problem ist aber, wie schreibt und liest man das, so dass vorher und hinterher dieselben Daten in denselben Variablen stehen?
Ich bin für jeden Vorschlag dankbar, auch wenn jemand eine Idee hat, die völlig anders aussieht als mein Ansatz.
 
Hi

ein Trennzeichen, das sonst nicht vorkommen kann, gibts nicht.
Wie wäre es, am Anfang eines Binärteils einfach die Länge abzuspeichern?
Als Binäre Zahl.
Wenn aus dem Confignamen nicht eindeutig herausgeht, ob es Binär oder nicht ist,
eben noch eine 0/1, B(inär)/T(ext) oder so dazu.
 
Hi,
eine andere Möglichkeit wäre vielleicht noch, wenn du dir den Aufbau von generellen .ini-Files ansiehst und es vielleicht anpasst oder sogar übernimmst. Unter Windows kannst du diese auch ganz einfach auslesen. Unter anderen Systemen sollte dies auch relativ einfach gehen.

Grüße
 
Soll mir alles Recht sein, von mir aus kann in der config sonstwas stehen.

code | typ | länge | daten
code | typ | länge | daten

Ich weiss sogar, dass ich dann beim Schreiben und Lesen mit einem Pointer arbeiten muss.
Aber wie?
 
Hi,

für Binäredaten in einer Konfigurationsdatei hab ich mir mal ne Bibliothek für bencoded-Strings implementiert. Den Source kannst du dir hier anschauen. (Abhängige Bibliothek für Strings die ihre Länge kennen)

Vom Prinzip her besteht meine Konfigurationsdatei aus einem Dictionary und da drin dann meine ganzen Schlüssel- und Wert-Paare. Die Dokumentation zum Schema kannst du dir hier mal genauer anschauen.

Die Bibliotheken von mir sind allerdings nicht allzu gut dokumentiert, wennst die verwenden willst und Fragen dazu hast, nur raus damit ;)

Gruß,
BK

// Edit: Ok, ich seh grad die Doku is quasi nicht vorhanden. Werde das nochmal überarbeiten und komplettieren und dann eine neue Version hochladen.
 
Zuletzt bearbeitet:
Hi,

hab mal das gröbste jetzt Dokumentiert in dem Header, mit einem SVN Update solltest die neueste, dokumentierte Version bekommen.

Der Rest folgt dann die nächsten Tage.

Gruß,
BK
 
Hi,

gibts zu dem Thema was neues? Wie kommst du mit der Bibliothek zurecht?
Bin in letzter Zeit ziemlich eingespannt mit Arbeit, deshalb komme ich wohl nicht so schnell dazu die Doku fertig zu machen...

Grüße,
BK
 
Zurück