TreeStructInfo – nowy sposób przechowywania ustawień konfiguracyjnych

Dzisiaj natrafiłem na projekt przechowywania danych konfiguracyjnych stworzonych przez jednego z moderatorów forum 4programmers .

tree_struct_info

Opis:

TreeStructInfo to projekt uniwersalnego formatu tekstowych i binarnych plików konfiguracyjnych, przeznaczonych do przechowywania ustawień aplikacji i gier w formie drzew danych. Umożliwia tworzenie zarówno prostych, jednoplikowych konfiguracji, jak i złożonych systemów konfiguracyjnych, składających się z wielu powiązanych ze sobą plików.

Format ten zaprojektowany został tak, aby był przyjazny dla człowieka, ale także jak najbardziej funkcjonalny i prosty do przetwarzania. Forma tekstowa daje możliwość tworzenia i edytowania plików w dowolnych edytorach, forma binarna zaś sprzyjać ma szybkości przetwarzania plików.

Przykład przechowywania danych tekstowych, liczbowych, binarnych oraz w atrybutach:

Przykładowy plik konfiguracyjny:
http://treestruct.info/pl/format/1.0.htm#idSampleFile

Przykłady przechowywania danych tekstowych, liczbowych i binarnych:
http://treestruct.info/pl/format/1.0.htm#idAttrValuesDataTypes

Opis plików konfiguracyjnych w formie tekstowej:
http://treestruct.info/pl/format/1.0.htm#idTextForm

Opis plików konfiguracyjnych w formie binarnej:
http://treestruct.info/pl/format/1.0.htm#idBinaryForm

Strona projektu –  http://treestruct.info

Jak flushować pliki INI

Jakiś czas temu próbowałem tworzyć kopię zapasową pliku INI, który właśnie został zaktualizowany 2 linijki kodu wyżej i czego bym nie zrobił, wykonanie kopii zapasowej nigdy nie udawało się (plik nie zawierał wcześniej wprowadzonych zmian).

Próbowałem nawet jakichś dziwnych sposobów z użyciem funkcji Sleep, ale nic nie dawało rezultatów, ostatecznie z braku dalszych pomysłów (i nie aż tak ważnej roli tego kodu) porzucilem pomysł na wykonywanie tychże kopii zapasowych.

Dzisiaj zupełnie przypadkowo zobaczyłem na jakiejś stronie wywołanie funkcji WritePrivateProfileString z wszystkimi parametrami ustawionymi na NULL i jak się okazało to było to czego kiedyś szukałem – konkretnie powoduje zapisanie zmian wprowadzonych do pliku INI na dysk lub do rejestru (jeśli plik jest mapowany).

Zgodnie z dokumentacją na stronie MSDN, pliki INI są cache’owane, aby zwiększyć wydajność działania systemu operacyjnego.

Morał z tej historii taki, że jak już się czyta dokumentację, to nie należy kończyć na opisie parametrów i zwracanych wartościach 🙂