| 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 |