binarne zapisywanie i odczytywanie struktur "Program przestał działać"
Ostatnio zmodyfikowano 2015-05-19 11:29
bmb.bambus Temat założony przez niniejszego użytkownika |
binarne zapisywanie i odczytywanie struktur "Program przestał działać" » 2015-05-18 18:13:09 Staram się binarnie zapisać i odczytać tablicę struktur do pliku sam zapis i odczyt nie przerywa działania programu jedynie późniejsza próba wyświetlenia tego. Dlaczego sie tak dzieje i co jest nie tak z tymi funkcjami ? #include <windows.h> #include <stdio.h> #include <iostream> #include <string> #include <cstdio> #include <fstream> using namespace std;
class Rejestr { public: struct opis_samochodu { string marka; string model; string typ_nadwozia; string vin; string rok_produkcji; string ladownosc; string typ_silnika; long przebieg; }; };
void zapis( Rejestr::opis_samochodu * tab ) { FILE * file = fopen( "rejestr.data", "w" ); for( int i = 0; i < 4; i++ ) { fwrite( & tab[ i ], sizeof( Rejestr::opis_samochodu ), 1, file ); } }
void odczyt( Rejestr::opis_samochodu * tab ) { FILE * file = fopen( "rejestr.data", "r" ); for( int i = 0; i < 4; i++ ) { fread( & tab[ i ], sizeof( Rejestr::opis_samochodu ), 1, file ); } }
int main( void ) { Rejestr::opis_samochodu * tab; int n = 4; tab = new( nothrow ) Rejestr::opis_samochodu[ n ]; zapis( tab ); odczyt( tab ); cout << tab[ 0 ].marka; return 0; } |
|
pekfos |
» 2015-05-18 18:26:56 Nie możesz tak zapisać struktur, które zawierają pola std::string, lub tym podobne. |
|
Rashmistrz |
» 2015-05-18 20:43:22 A nie możesz normalnie tekstowo?! |
|
bmb.bambus Temat założony przez niniejszego użytkownika |
» 2015-05-19 10:13:26 Skoro nie ma możliwości zapisania stringa ze struktury to może tablice charow ? Więc nie ma możliwości zapisania struktury tablicy struktur binarnie ? Plik po otwarciu nie może pokazywać zawartości, również szyfrowanie odpada ze względu na treść zadania. :/ |
|
akwes |
» 2015-05-19 11:29:17 Jest możliwość zapisania struktury ale musi ona spełniać pewne założenia: What are POD types in C++?. Zawsze możesz napisać własny serializer/deserializer, który będzie Twoją klasę zapisywał do pliku i odczytywał z pliku dzięki wiedzy o strukturze i niezmiennikach danej klasy. Możesz też dać klasie funkcje, które będą ją serializować/deserializować. Serializacja i deserializacja będzie opierać się o dekompozycję klasy i jej składników aż do uzyskania typów, które będą spełniać założenia POD. Ewentualnie możesz skorzystać z boosta: http://www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.htmlJednak patrząc na treść zadania z niej wnioskuję, że na aktualnym poziomie najlepiej będzie Ci napisać funkcję, która binarnie zapisze string poprzez zapisanie jego rozmiaru (pojedynczy int) a później kolejnych charów łańcucha. Wczytując tego stringa będzie mogła zrobić odwrotnie: wczytać rozmiar (pierwszy int) i tyle charów ile ten int określi. |
|
« 1 » |