Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapisywanie klasy do pliku.

Ostatnio zmodyfikowano 2010-06-09 22:20
Autor Wiadomość
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 :
C/C++
ofstream konta( "Characters", ios::out );
konta << konto[ liczkont ];
No ale oczywiście to nie działa
P-17652
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.
P-17654
pekfos
» 2010-06-06 10:07:35
C/C++
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();
P-17656
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)...
P-17659
lenrokskate
» 2010-06-06 12:05:06
czyli?

C/C++
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();
P-17660
malan
» 2010-06-06 13:00:45
Mi niby coś takiego działa:
C/C++
#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 ); // 256- tak wiem- źle.
        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.
P-17662
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 ) );
P-17669
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.
P-17670
« 1 » 2 3 4 5
  Strona 1 z 5 Następna strona