Zapis struktury do pliku. [ios::binary].
Ostatnio zmodyfikowano 2013-03-23 13:17
PGS-MSI Temat założony przez niniejszego użytkownika |
Zapis struktury do pliku. [ios::binary]. » 2013-03-23 10:38:04 Witam kolegów, mam taki mały problem z którym nie mogę sobie poradzić już 3 dzień, a mianowicie: (Nie wiem jak włączyć listing kodu, proszę moderatora o pomoc :-) ) Mam taką strukturę: struct dane { unsigned short id; string imie; string dane; };
I nie wiem w jaki sposób zapisać to w trybie binarnym do pliku. A następnie to wczytać. Chciałbym to zrobić czysto w C++, jeżeli by się dało. bardzo proszę o jaką kolwiek wskazówkę. Michał. |
|
Chlorek |
» 2013-03-23 10:51:00 Kod bierze się w [cpp][/cpp] . Zapisać takie dane można jak każdy inny ciąg znaków: struct dane { unsigned short id; string imie; string dane; };
dane test { 1, "Test1", "Test2" }; string data;
|
|
rachel92 |
» 2013-03-23 10:57:26 Możesz to zrobić tak, że gdy masz np takie wartości pól struktury : dane.id = 12; dane.imie = "Bonifacy"; dane.dane = "Bonifacy to fajny gosc";
w pliku mozesz sobie zapisywac w najprostszy sposób jeden pod drugim: 12 Bonifacy Bonifacy to fajny gosc 13 Andrzej Andrzej ma fajna siostre
czytając te dane seriami po 3 możesz pakować je w tablice struktur np dane[ i ].imie << getline(); tam gdzie dane[ i ].id to konwersja na int za pomocą atof itd. Teraz jest tylko problem, co będzie jeśli przez przypadek usuniesz 12 z pliku , będzie wyglądał tak : Bonifacy Bonifacy to fajny gosc 13 Andrzej Andrzej ma fajna siostre
w 1 przypadku będziesz chciał przekonwertować string "Bonifacy" na int , czego się nie robi. Jeśli ma to być dobrze napisane , to wykorzystał bym do tego XML. [C++] Obsługa plików XML - biblioteka RapidXMLhttp://xion.org.pl/2010/05/19/xml-w-c-proste-rozwiazanie/ |
|
Chlorek |
» 2013-03-23 11:03:04 A jeśli XML to PugiXML (ze wszystkich bibliotek używało mi się tego najlepiej). |
|
PGS-MSI Temat założony przez niniejszego użytkownika |
» 2013-03-23 11:13:45 Ok dzięki wielkie wam za pomoc,ale ja chce to zapisywać do pliku binarnie tak żeby pliku nie dało się odczytać np. w notatniku. I nie chciał bym na razie używać XML'a. próbowałem tym, ale to nie chce działać z string'iem. plik.write(( char * ) & dane, sizeof( dane ) );
. |
|
Chlorek |
» 2013-03-23 11:20:30 Zapis binarny przez fstream nie działa tak jak ci się wydaje, otrzymasz i tak zwykłe dane w pliku. |
|
PGS-MSI Temat założony przez niniejszego użytkownika |
» 2013-03-23 11:34:57 Aha, no to dobrze wiedzieć, nie muszę już kombinować dlaczego to nie działa. A powiedzcie mi czy istnieje jakaś funkcja czy prostsza tym lepiej która pozwoli mi zapisywać dane do pliku w sposób w który nie będzie można ich odczytać z np: notatnika? A będzie można je wczytać z programu?
A i jak bym mógł prosić o takie krótkie łopatologiczne wyjaśnienie co daje tryb ios::binary? |
|
Chlorek |
» 2013-03-23 11:40:41 Użycie ios_binary można powiedzieć, że jest surowym zapisem do pliku, między innymi nie są zmieniane znaki sterujące i są one prosto zapisywane do pliku, np. znak nowej linii. Aby nie można było ich tak po prostu odczytać to np. użycie jakiegoś powiedzmy szyfrowania, najprostszy to chyba XOR (znajdziesz wiele tutoriali w internecie), mało bezpieczne ale nie odczytasz tak po prostu takiego pliku. A XOR'owanie ma ten plus, że ten sam algorytm szyfruj i deszyfruje, dodatkowo jest bardzo krótki. |
|
« 1 » 2 |