zapis/odczyt do pliku, wektora zawierającego inny wektor
Ostatnio zmodyfikowano 2013-02-18 14:16
ziommus Temat założony przez niniejszego użytkownika |
zapis/odczyt do pliku, wektora zawierającego inny wektor » 2013-02-18 13:48:59 Dzień dobry, pisząc mój programik pojawiła się potrzeba zapisywania i odczytywania danych do pliku. Niestety ze względu na dość nietypową jak dla mnie zawartość klasy, mam problem z poprawnym zapisaniem/odczytaniem. Tak wygląda klasa Element: class Element { public: Element(); string polski; string angielski; double interval_multiplier; vector < int > mark_history; int adding_time; int last_revise; double revise_interval; };
A o to funkcja zapisu: void File::Save_Progress() { int i, liczba; string nazwa = "mem.txt"; const char * name = nazwa.c_str(); ofstream plik( name, ios::binary ); if( plik ) cout << endl << "zapis do pliku" << endl; else cout << endl << "Blad pliku!" << endl; for( i = 0; i < baza.size(); ++i ) plik.write(( char * ) & baza[ i ], sizeof( Element ) ); plik.close(); }
A to funkcja odczytu: void File::Load_Progress() { int i, liczba; Element temp; string nazwa = "mem.txt"; const char * name = nazwa.c_str(); ifstream plik( name, ios::binary ); if( plik ) cout << endl << "odczyt z pliku" << endl; else cout << endl << "Blad pliku!" << endl; while( !plik.eof() ) { plik.read(( char * ) & temp, sizeof( Element ) ); baza.push_back( temp ); } plik.close(); system( "pause" ); }
Kompilator nie zgłasza żadnych błędów, ale w momencie gdy próbuję odczytać dane z pliku program się zawiesza. Nie jestem nawet pewny czy tak da się to zrobić. Być może trzeba będzie każde pole z klasy potraktować osobno. Za pomoc z góry dziękuję. |
|
kubawal |
» 2013-02-18 14:16:35 string nazwa = "mem.txt"; const char * name = nazwa.c_str();
ifstream plik( name, ios::binary );
|
Można to spokojnie zredukować do jednej linijki: ifstream plik( "mem.txt" );
Optymalizacja! /edit: We/wy binarne się do tego nie nadaje. Zapisz to w postaci tekstu: istream & operator >>( istream & is, Element & e ) { is >> e.nazwa; for( int i = 0; i < e.jakis_wektor.size(); i++ is >> e.jakis_wektor[ i ]; return is; }
|
|
« 1 » |