Zapis do pliku binarnego

Zapis do pliku binarnego
TY
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:41
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?

kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Łódź
  • Postów:1402
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.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:dzień
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ść.

TY
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:41
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.

TY
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:41
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

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:dzień
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ć.

kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Łódź
  • Postów:1402
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.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
TY
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:41
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.

edytowany 1x, ostatnio: tytrydsdf

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.