zapis tablicy typu struktura do pliku binarnego i odczyt
Ostatnio zmodyfikowano 2015-01-29 16:39
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...... std::ofstream plik2; 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; 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 Wyn[ 4 ].score = 2; std::ifstream plik3; 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....? |
|
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. |
|
|
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ą ? |
|
pekfos |
» 2015-01-21 20:53:57 p.write( str.c_str(), str.size() + 1 );
Odczyt np za pomocą getline() z odpowiednim 3. argumentem. |
|
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 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” Następnym krokiem jest próba odczytu/ zapisu do pliku. Nie dokończa jest dla mnie jasna Twoja próba zapisu struktury do pliku. 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 ). ( 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 ] ? |
|
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" ?
|
|
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. |
|
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 ? |
|
1 « 2 » 3 |