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

zapis tablicy typu struktura do pliku binarnego i odczyt

Ostatnio zmodyfikowano 2015-01-29 16:39
Autor Wiadomość
miniu
Temat założony przez niniejszego użytkownika
» 2015-01-19 19:07:35
Jeżeli nie nadużyję cierpliwości mogę się zapytać (dopytać jeszcze) ....
dlaczego jak program wykonuję ten kod "zapis" a  potem "odczyt" jest ws. ok......

C/C++
std::ofstream plik2; //  pisanie
plik2.open( "score13.dat", ios::out | ios::binary );
cout << "otworzono: " << plik2.good() << endl;
plik2.write(( char * ) Wyn, sizeof( Wyn ) );
plik2.close();

Wyn[ 4 ].score = 2;

std::ifstream plik3; // czytanie
plik3.open( "score13.dat", ios::binary | ios::in );
cout << "otworzono: " << plik3.good() << endl;
int wczytano_wpisow = 0;
while( plik3.read(( char * ) & Wyn[ wczytano_wpisow ], sizeof( struct SScore ) ) )
     wczytano_wpisow++;

plik3.close();

ale jeżeli wywołam sam ten kod

C/C++
Wyn[ 4 ].score = 2;
std::ifstream plik3; // czytanie
plik3.open( "score13.dat", ios::binary | ios::in );
cout << "otworzono: " << plik3.good() << endl;
int wczytano_wpisow = 0;
while( plik3.read(( char * ) & Wyn[ wczytano_wpisow ], sizeof( struct SScore ) ) )
     wczytano_wpisow++;

plik3.close();

wyskakuje błąd programu....?
P-125219
pekfos
» 2015-01-21 19:08:12
Odpowiedź już padła.
Taką prymitywną metodą nie można zapisywać i odczytywać struktur które zawierają std::string.
P-125327
miniu
Temat założony przez niniejszego użytkownika
» 2015-01-21 20:41:20
acha a co trzeba zrobić żebyś mógł podzielić się tą bardziej rozwiniętą ewolucyjnie metodą ?
P-125338
pekfos
» 2015-01-21 20:53:57
C/C++
p.write( str.c_str(), str.size() + 1 );
Odczyt np za pomocą getline() z odpowiednim 3. argumentem.
P-125340
miniu
Temat założony przez niniejszego użytkownika
» 2015-01-24 22:27:55
Dzięki  ”pekfos„ za odpowiedz ale chciałbyś się troszeczkę upewnić i dopytać.  
W moim programie deklaruję globalnie strukturę danych
C/C++
struct SScore
{ string name;
    int score; };
Gdzie w występują dwa pola (zmienna typu string oraz intiger).
W części głównej wykonawczej programu (main)   tworze tablice obiektu struktury i nazywam ją „Wyn”
C/C++
SScore Wyn[ 6 ];
Następnym krokiem jest próba odczytu/ zapisu do pliku.

Nie dokończa jest dla mnie jasna Twoja próba zapisu struktury do pliku.
C/C++
p.write( str.c_str(), str.size() + 1 );

Według niej miałbym wpisywać do pliku  pojedynczo, wszystkie poszczególne  rekordy moje str,  jako  string (zakładając że wcześniej dokonałbym rzutowania int na string ). (
C/C++
p.write( Wyn[ 1 ].name.c_str(), Wyn[ 1 ].name.size() + 1 );
   )  Czy jednak można to zrobić jednorazowo cały obiekt u mnie 
Wyn[ 6 ]
 ?
P-125504
miniu
Temat założony przez niniejszego użytkownika
» 2015-01-27 18:30:41
Czy ma może ktoś jakiś pomysł jeszcze  w zapasie a może ten Kolega co tak chętnie nadużywa słowa "prymitywna" ?

P-125627
pekfos
» 2015-01-29 10:41:38
Nie dokończa jest dla mnie jasna Twoja próba zapisu struktury do pliku.
Bo to nie jest zapis struktury do pliku.

Według niej miałbym wpisywać do pliku  pojedynczo, wszystkie poszczególne  rekordy moje str,  jako  string (zakładając że wcześniej dokonałbym rzutowania int na string ). (
Nie. Tylko std::string musisz zapisywać w ten sposób. Pola int możesz zapisywać jak wcześniej.

Czy jednak można to zrobić jednorazowo cały obiekt u mnie 
Wyn[ 6 ]
 ?
Nie. Jeśli koniecznie chcesz jednorazowo, zmień std::string na tablicę znaków. 'prymitywne' dane możesz zapisywać 'prymitywnie' i wszystkie naraz.
P-125714
miniu
Temat założony przez niniejszego użytkownika
» 2015-01-29 12:50:26
Kolego „pekfos” ja już w tytule napiąłem 
  zapis tablicy typu struktura do pliku binarnego i odczyt
  Ty w kolejnym poście napisałeś „
Taką prymitywną metodą nie można zapisywać i odczytywać struktur które zawierają std::string.
 Nie było napisać że po prostu nie można takiej struktury zapisać do w całości pliku i żadną inną , albo nic nie pisać może ktoś by miał lepszy pomysł  kto przeczytał mój post ze zrozumieniem i nie od połowy ? 
P-125718
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona