Ich glaube, das Problem ist weniger Grundsätzlich als den Anschein hat. Im Grunde reduziert es sich auf das Escapen von Sonderzeichen.Bebu hat geschrieben:Ich habe drei Möglichkeiten, um darauf zu reagieren:
Escapesequenzen um solche Fehler im Pfadstring abzufangen
Pro:
Wohl die schnellste Lösung
Im Notfall kannst du das selber einbauen, denn du hast ja bereits einen Wrapper um SQLite! Du musst nur beim speichern alle Zeichen escapen und beim laden alle wieder zurückumwandeln.Bebu hat geschrieben:Contra: Gibt es bei Sqlite überhaupt solche Sequenzen?
Übrigens, warum speicherst du die Strings nicht einfach als "Blob" Datentyp? Gibts da irgendwelche Probleme?
Warte...Die Umwandlung in diesen String resultiert bei Windows zu einem Problem, weil hier intern ein wchar benutzt wird und das sowieso störend auffällt.
Boost.Filesystem gibt auf Linux UTF-8 mit char und auf Windows UTF-16 mit wchar_t zurück, richtig?
Ich glaube übrigens, das ist gar nicht so heikel... Ich hätte da ne Idee.
Also dieses Contra ist schon ein ziemliches Killer-Contra.Die Nutzung einer Serialisierungsbibliothek um den Zustand der Klassen direkt abzuspeichern.
Pro: Von Boost verfügbar.
Contra: Eine Datenbankänderung bedeutet, das jedesmal die gesamte Datenbank neu geschrieben werden muss.
Im Endeffekt müsstest du eine Datenbankbibliothek nachprogrammieren. "That doesn't scale well", wenn man auf zeitliche Ressourcen achtet.Selbstschreiben eines Binärdateiparsers mit Jornalfunktion.
Pro: Flexibel und Platzsparend.
Contra: Hoher Aufwand, praktisch ein eigenes kleines Dateisystem nötig. Wie lässt sich so etwas gestalten, damit es wiederverwendbar ist? Boost::Spirit? Template Klassen?
Ein kleiner Comic zum Thema: http://xkcd.com/327/Das waren meine Gedankengänge zum Thema bisher. Habt ihr noch eine andere Idee? Sonstige Anregungen?