Zapisywanie klasy do pliku.
Ostatnio zmodyfikowano 2010-06-09 22:20
kizia Temat założony przez niniejszego użytkownika |
Zapisywanie klasy do pliku. » 2010-06-06 00:38:06 Tak jak w temacie mam klasę i chcę ją zapisać do pliku, tylko czy da się jakoś na raz do pliku bo jest w niej ponad 20 zmiennych a pewnie będzie jeszcze więcej ? Na raz to chodzi mi o coś w stylu : ofstream konta( "Characters", ios::out ); konta << konto[ liczkont ]; No ale oczywiście to nie działa |
|
michalp |
» 2010-06-06 08:16:46 Nie klasę a obiekt. Musisz najpierw rzutować obiekt na char* i zapisać potem do pliku który otworzyłeś do zapisu binarnego. |
|
pekfos |
» 2010-06-06 10:07:35 class obj_c { int a, b; ENUM cos; char c; }; obj_c obj; ofstream of; of.open( "zuo.bin", ios::binary ); of.write(( char * ) obj, sizeof( obj_c ) + 2 ); of.close(); |
|
Elaine |
» 2010-06-06 11:47:06 Po co dodajesz 2 do rozmiaru struktury? Wiesz, że w ten sposób czytasz poza obiektem i masz UB? I przede wszystkim, std::basic_ostream<>::write() chce ADRES tego, co ma zapisać, nie WARTOŚĆ przerzutowaną na char* (co i tak się za bardzo nie uda w tym przypadku)... |
|
lenrokskate |
» 2010-06-06 12:05:06 czyli? class obj_c { int a, b; ENUM cos; char c; }; obj_c obj; ofstream of; of.open( "zuo.bin", ios::binary ); of.write( & obj, sizeof( obj_c ) ); of.close();
|
|
malan |
» 2010-06-06 13:00:45 Mi niby coś takiego działa: #include <iostream> #include <fstream> #include <string>
class Player { public: std::string pName; int health; int x; int y; };
const char FileName[] = "plik.txt";
bool WriteToFile( Player myObj ) { std::ofstream file; file.open( FileName, std::ios::binary | std::ios::app ); if( file.good() ) { file.write( reinterpret_cast < char *>( & myObj ), sizeof( myObj ) ); file.close(); } };
bool GetFromFile( Player & myObj ) { std::fstream file; file.open( FileName, std::ios::binary | std::ios::in ); if( file.good() ) { file.read( reinterpret_cast < char *>( & myObj ), 256 ); file.close(); } };
int main() { Player newPlayer; newPlayer.pName = "player1"; newPlayer.health = 1; newPlayer.x = 1; newPlayer.y = 1; WriteToFile( newPlayer ); Player malan; GetFromFile( malan ); std::cout << malan.pName << std::endl; std::cout << malan.health << std::endl; std::cout << malan.x << std::endl; std::cout << malan.y << std::endl; getchar(); return 0; }; Oczywiście działa tylko dla jednego wpisu, ale gdyby to rozbudować, to może by coś z tego było. |
|
kizia Temat założony przez niniejszego użytkownika |
» 2010-06-06 15:47:03 Żadnym z tych sposobów nie udało mi się tego zrobić. W kodzie malana program tworzy plik ale nic do niego nie zapisuje. A w Lenrokskate wyskakuje błąd przy : of.write( & obj, sizeof( obj_c ) ); |
|
lenrokskate |
» 2010-06-06 15:54:08 #kizia
Nic nie zapisuje bo do pliku nie zapisujesz danych tekstowych tylko binarne. Kiedy uruchomisz program malana to w wyświetlają się elementy klasy? Jak tak to działa. |
|
« 1 » 2 3 4 5 |