Zapis do pliku binarnego

0

Hej, mam duży obiekt klasy która jest prymitywną bazą danych w c++. Obiekt ten posiada vector w którym są obiekty struktury użytkownicy. Każdy użytkownik ma imie, nazwisko, rok urodzenia itp.

Chcę teraz zapisać cały obiekt bazy danych do pliku binarnego i potem móc go wczytać. Ale jest problem bo jest tam dynamiczny wektor a do tego w nim uzytkownicy którzy mają pola typu string. Żeby to zrobić tak po prostu to bym musiał zastąpić wszystko jakimiś statycznymi tablicami aby rozmiar był stały i znany. W jaki sposób więc się zapisuje takie bardziej złożone klasy jak moja do pliku binarnego? Ma ktoś jakieś dobre proste przykłady?

0

Masz 2 wyjscia:

  1. zapisujesz rekordy o stalej wielkosci ze stalym wyrownaniem pól (wtedy będzie działało to najszybciej)
  2. zapisujesz dane opakowane w metaznaki, np tak jak są zapisywane w formacie iff (w uproszczeniu to taki kontener binarny z czasów gdy nie stosowano xml-a, parsowanie jest proste, dane zapisujemy/odczytujemy binarnie), wtedy bedziesz mógł bezproblemowo użyć dowolnej długości stringów.

Taka porada: odziel warstwę danych od warstwy widoku.

1

Poczytaj jak wygląda format jakiegoś pliku binarnego, ot chociażby WAV, który jest przecież jakby tablicą o różnej długości.

Żeby zapisać tablicę musisz zakodować w określonym miejscu jej długość.

0

a jakieś konkretne przykłady albo dobry tutorial na ten temat istnieje?

Bo nie wiem jak zrobić stałe wyrównywanie pól, nawet nie wiem ile zmienna string może zabierać miejsca bo to zależeć będzie od długości wpisanej danej przez użytkownika.

Ani nie wiem jak zakodować długość tablicy.

0

znalzałem opcję w bibliotece boost która odpowiada za serializację, czy to może być dla mnie dobre rozwiązanie?

http://staff.elka.pw.edu.pl/~rnowak2/zprwiki/doku.php?id=serialization

1

a jakieś konkretne przykłady albo dobry tutorial na ten temat istnieje?
ale konkretny przykład dotyczący konkretnego twojego przypadku nazywałby się gotowcem...

znalzałem opcję w bibliotece boost która odpowiada za serializację, czy to może być dla mnie dobre rozwiązanie?
może być.

1

stałe wyrównanie pół - znaczy - że pola będą stałej długości - z takim samym wyrównaniem (np struktura spakowana), wtedy każdy rekord będzie tej samej wielkościwczytywanie wtedy z pliku do takiej struktury będzie banalne.

1

Skorzystałem w końcu z boost:serialization i ta biblioteka zrobiła wszystko co potrzebowałem łącznie z uzyciem wskaznikow, statycznych pól, vectorów, stringów itp. Pomijając kłopoty z błędami przy budowaniu i linkowaniu biblioteki to rozwiązanie dzięki niej było w sumie banalne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1