wczytanie danych z pliku bezpośrednio do klasy

0

Witam, mam do napisania program symulujący pracę biblioteki. Program sam w sobie działa, ale pozostała mi kwestia przechowywania danych - nie mogę ogarnąć, jak wczytać do klasy dane z pliku, w którym wcześniej zostały zapisane binarnie.

#include "Ksiazka.h"
#include "Czytelnik.h"
#include "Katalog_Czytelnik.h"
#include "Katalog_Ksiazka.h"
#include <fstream>
#include <sstream>
#include <istream>

void main()
{
	Katalog_Ksiazka kat;
	Katalog_Ksiazka nowy(30);
	Ksiazka k1((string)"Trzeci blizniak", (string)"Ken Follett", 492, (string)"Anglia", (string)"thriller");
	Ksiazka k2((string)"Protokol budapesztanski", (string)"Adam LeBor", 447, (string)"Anglia", (string)"thriller");
	Ksiazka k3((string)"Godzina zero", (string)"Agata Christie", 150, (string)"Anglia", (string)"kryminal");
	Ksiazka k4((string)"Cpun", (string)"William S. Burroughs", 182, (string)"USA", (string)"dramat");
	Ksiazka k5((string)"Szumowny", (string)"Isaac Bashevis Singer", 206, (string)"Polska", (string)"dramat");
	Ksiazka k6((string)"Zamek", (string)"Franz Kafka", 378, (string)"Austria", (string)"psychologiczna");
	Ksiazka k7((string)"W gore rzeki", (string)"Lorian Hemingway", 334, (string)"USA", (string)"dramat");
	Ksiazka k8((string)"Historia zyda Wiecznego Tulacza", (string)"Jean d'Ormesson", 615, (string)"Francja", (string)"historyczna");
	Ksiazka k9((string)"Napij sie z diablem", (string)"Jack Higgins", 270, (string)"Anglia", (string)"sensacyjna");
	Ksiazka k10((string)"Dopuszczalne ryzyko", (string)"Robin Cook", 350, (string)"USA", (string)"thriller");
	
	kat.DodajK(k1);
	kat.DodajK(k2);
	kat.DodajK(k3);
	kat.DodajK(k4);
	kat.DodajK(k5);
	kat.DodajK(k6);
	kat.DodajK(k7);
	kat.DodajK(k8);
	kat.DodajK(k9);
	kat.DodajK(k10);

	fstream str;
	fstream str2;
	
	str2.open("katalogk.txt", ios::in | ios_base::binary);
	if (str2.good() == true)
	{
		str2.read((char*)&nowy, sizeof(nowy));
		str2.close();
	}
	else cout << "brak dostepu do pliku" << endl;

	nowy.Drukuj_Katalog();


	str.open("katalogk.txt", ios::out | ios::trunc | ios_base::binary);
	str.write((char*)&kat, sizeof(kat));
	str.close();



	


	getchar();
}

Tu mam przykładowe tworzenie katalogu książek i co dziwne (albo też nie) w momencie, gdy odpalę w programie najpierw zapis klasy 'kat' do pliku, a potem jej wczytanie z pliku do klasy 'nowy' wszystko działa, natomiast, gdy mam już przygotowany plik binarny z katalogiem i odpalę tylko wczytanie, to nie działa.

Ma ktoś pomysł, czemu tak się dzieje i jak sobie z tym poradzić?

0

Jest tylko jeden sposób zbudowania klasy Katalog_Ksiazka, aby polecenie:
str.write((char*)&kat, sizeof(kat));
zapisało coś sensownego do pliku, a z całą pewnością nie zastosowałeś tego sposobu, tym bardziej że sposób ten jest bardzo bezsensowny.

0
_13th_Dragon napisał(a):

Jest tylko jeden sposób zbudowania klasy Katalog_Ksiazka, aby polecenie:
str.write((char*)&kat, sizeof(kat));
zapisało coś sensownego do pliku, a z całą pewnością nie zastosowałeś tego sposobu, tym bardziej że sposób ten jest bardzo bezsensowny.

więc czemu, gdy wywołam najpierw zapis do pliku, a potem wczytanie z niego to wczytanie faktycznie działa i daje poprawny rezultat? (a przynajmniej wygląda on na poprawny). czy w takiej sytuacji następuje wczytanie danych nie z pliku, ale ze strumienia str?

0
Ksiazka k1((string)"Trzeci blizniak", (string)"Ken Follett", 492, (string)"Anglia", (string)"thriller");
...
kat.DodajK(k1);
kat.DodajK(Ksiazka("Trzeci blizniak", "Ken Follett", 492, "Anglia", "thriller"));
0
michal89216 napisał(a):

więc czemu, gdy wywołam najpierw zapis do pliku, a potem wczytanie z niego to wczytanie faktycznie działa i daje poprawny rezultat? (a przynajmniej wygląda on na poprawny). czy w takiej sytuacji następuje wczytanie danych nie z pliku, ale ze strumienia str?
Bo zapisałeś w pamięć zajmowaną przez klasę to co w niej przed chwilą było, czyli nic się nie zmieniło.

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