Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapis struktury do pliku. [ios::binary].

Ostatnio zmodyfikowano 2013-03-23 13:17
Autor Wiadomość
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ę:
C/C++
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ł.
P-79186
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:
C/C++
struct dane {
    unsigned short id;
    string imie;
    string dane;
};

dane test { 1, "Test1", "Test2" };
string data;
// zapisz dane z 'test' do dane oddzielone np. spacjami
// i zapisz do pliku
P-79188
rachel92
» 2013-03-23 10:57:26
Możesz to zrobić tak, że gdy masz np takie wartości pól struktury :
C/C++
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 RapidXML
http://xion.org.pl/2010/05/19/xml-w-c-proste-rozwiazanie/
P-79189
Chlorek
» 2013-03-23 11:03:04
A jeśli XML to PugiXML (ze wszystkich bibliotek używało mi się tego najlepiej).
P-79190
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.
C/C++
plik.write(( char * ) & dane, sizeof( dane ) ); // Składania może być trochę skopana bo chodzi mi tylko o przedstawienie funkcji którą próbowałem wykorzystać
.
P-79193
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.
P-79194
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?
P-79195
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.
P-79196
« 1 » 2
  Strona 1 z 2 Następna strona