mykosik Temat założony przez niniejszego użytkownika |
Zapis struktur danych do pliku » 2011-08-13 10:09:11 Witam 1.Czy dane różnego typu ze struktury mają być zapisane w osobnych plikach?Czy tez można różne typy danych ze struktury zapisać do tego samego pliku?Jeżeli tak to jak je później odzyskać aby to były dane okreslone przez strukturę 2.Czy mogę używać znaku specjalnego \n aby tworzyc nowy wiersz podczas zapisywania danych do pliku? Zrobiłem coś takiego i to działa ale nie wiem czy tak to sie powinno prawidłowo robić? #include <iostream> #include <fstream>
using namespace std;
struct dane { string imie; int liczba; }; int main() { dane osobowe[ 5 ]; string spac = "\n"; ofstream Imie( "imie.txt", ios::app ); for( int i = 0; i < 5; i++ ) { cout << "podaj imie" << endl; cin.sync(); cin >> osobowe[ i ].imie; Imie << osobowe[ i ].imie; Imie << spac; } Imie.close(); ofstream licz( "liczba.txt", ios::app ); for( int i = 0; i < 5; i++ ) { cout << "podaj liczbe" << endl; cin.sync(); cin >> osobowe[ i ].liczba; licz << osobowe[ i ].liczba; licz << spac; } licz.close(); return 0; }
|
|
m4tx |
» 2011-08-13 10:21:45 |
|
mykosik Temat założony przez niniejszego użytkownika |
» 2011-08-13 10:27:16 Dzieki, Bracie tego szukałem! |
|
mykosik Temat założony przez niniejszego użytkownika |
» 2011-08-14 15:32:42 Wszystko fajnie ale jest tu błąd DLACZEGO? #include <string> #include <fstream>
struct s { int a; float b; };
void write( const std::string & file_name, s & data ) { std::ofstream out( file_name.c_str() ); out.write( reinterpret_cast < char *>( & s ), sizeof( s ) ); }
void read( const std::string & file_name, s & data ) { std::ifstream in( file_name.c_str() ); in.read( reinterpret_cast < char *>( & s ), sizeof( s ) ); }
int main() { s myStruct; read( "test.dat", myStruct ); write( "test.dat", myStruct ); }
|
|
m4tx |
» 2011-08-14 15:39:07 void write( const std::string & file_name, s & data ) { std::ofstream out( file_name.c_str() ); out.write( reinterpret_cast < char *>( & s ), sizeof( s ) ); }
void read( const std::string & file_name, s & data ) { std::ifstream in( file_name.c_str() ); in.read( reinterpret_cast < char *>( & s ), sizeof( s ) ); } Zamień to na: void write( const std::string & file_name, s & data ) { std::ofstream out( file_name.c_str() ); out.write( reinterpret_cast < char *>( & data ), sizeof( s ) ); }
void read( const std::string & file_name, s & data ) { std::ifstream in( file_name.c_str() ); in.read( reinterpret_cast < char *>( & data ), sizeof( s ) ); } Autorowi tematu, do którego dałem Ci link chyba coś się pomyliło ;) |
|
mykosik Temat założony przez niniejszego użytkownika |
» 2011-08-14 17:32:15 Dziekuję bardzo za odpowiedż Nie przerabiałem jeszcze rzutowania co to oznacza reinterpret_cast < char *>( & data ) Czu chodzi o to że dane zawarte strukturze są zamieniane na znaki? |
|
pekfos |
» 2011-08-14 18:21:28 Nie są przerabiane lecz są traktowane jak znaki. otwieraj plik binarnie by nie tracić danych(a raczej ich nie zyskiwać :P) Wtedy przejście do nowej linii to nie "\n" tylko "\r\n" . |
|
mykosik Temat założony przez niniejszego użytkownika |
» 2011-08-22 10:02:40 Niestety nie kapuję , jak te dane zapisać i odczytać ?Czy ktoś może to jasno wytłumaczyć? #include <iostream> #include <string> #include <fstream> using namespace std;
struct s { int a; float b; };
void write( const std::string & file_name, s & data ) { std::ofstream out( file_name.c_str() ); out.write( reinterpret_cast < char *>( & data ), sizeof( s ) ); }
void read( const std::string & file_name, s & data ) { std::ifstream in( file_name.c_str() ); in.read( reinterpret_cast < char *>( & data ), sizeof( s ) ); }
int main() { s myStruct; myStruct.a = 5; myStruct.b = 34; read( "test.dat", myStruct ); write( "test.dat", myStruct ); }
|
|
« 1 » 2 |