Ĺadny brzuch
Zapisuje sobie coś do pliku w sposób binarny aby po otwarciu go były tam "krzaczki" jest dobrze, ale odczytując informacje chce aby były one już sforamowane cz. czytelne dla ludzi, oto kod:
#include <iostream> #include <fstream> #include <conio.h> #include <string> using namespace std; strum_z ofstream; // do zapisu strum_cz ifstream // do czytania string tekst; int main() { strum_z.open("data.lol", ios::binary); teskt = "To jest tekst zapisany binarnie!"; strum_z.write((char*)&tekst,sizeof(tekst)); strum_z.close cout << "Dane zostaly zapisane!" << endl; strum_cz.open("data.lol"); string zdanie; strum_cz.get((char*)&zdanie,sizeof(tekst)); strum_cz.close cout << "Dane zostaly odczytane!" << endl; cout << "Wcisnij dowolny klawisz aby wyswietlic zawartosc obiektu (zdanie)" << endl; getch(); cout << Jest tam taki tekst: " << zdanie << endl; getch(); return 0; }
Dlaczego po wczytaniu w zmiennej "zdanie" nie ma ludzikego tekstu do czytania tylko krzaczki?
Jak to poprawić aby działało poprawnie?
Bo nie zapisujesz tekstu, tylko składowe klasy std::string.
Tak samo pobierasz 'na chama' zawartość stringa; aż dziw, że Ci się to nie wysypało.
Zapisuj tak:
strum_z.write(tekst.c_str(),tekst.size());
A odczytuj tak:
char bufor[1024];
strum_cz.get(&(bufor[0]), 1024);
zdanie = bufor;
Ale i tak jak zapiszesz tekst poprawnie, to będziesz widział w pliku nie krzaczki, a tekst właściwy. Nie ma fizycznej różnicy między zapisem binarnym a tekstowym - wszystko jest zapisywane binarnie, tylko niektóre bajty [lub dwubajty] reprezentują literę :P
Jak chcesz mieć krzaczkowanie/dekrzaczkowanie plików, to opracuj jakieś szyfrowanie tekstu przed zapisem.
"Konkluzja sprawy jest następująca":
Nie zapisuj brutalnie obiektów klasy std::string do pliku, gdyż wbrew pozorom bardzo mało prawdopodobne jest, żeby zawierały w sobie tekst.
Pozdrawiam,
TeMPOraL.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <iostream> #include <fstream> #include <conio.h> #include <string> using namespace std; strum_z ofstream; // do zapisu strum_cz ifstream // do czytania string tekst; int main() { strum_z.open("data.lol", ios::binary); teskt = "To jest tekst zapisany binarnie!"; strum_z.write((char*)&tekst,sizeof(tekst)); strum_z.close cout << "Dane zostaly zapisane!" << endl; strum_cz.open("data.lol"); string zdanie; strum_cz.get((char*)&zdanie,sizeof(tekst)); strum_cz.close cout << "Dane zostaly odczytane!" << endl; cout << "Wcisnij dowolny klawisz aby wyswietlic zawartosc obiektu (zdanie)" << endl; getch(); cout << Jest tam taki tekst: " << zdanie << endl; getch(); return 0; }
Dlaczego po wczytaniu w zmiennej "zdanie" nie ma ludzikego tekstu do czytania tylko krzaczki?
Jak to poprawić aby działało poprawnie?
Bo nie zapisujesz tekstu, tylko składowe klasy std::string.
Tak samo pobierasz 'na chama' zawartość stringa; aż dziw, że Ci się to nie wysypało.
Zapisuj tak:
strum_z.write(tekst.c_str(),tekst.size());
A odczytuj tak:
char bufor[1024];
strum_cz.get(&(bufor[0]), 1024);
zdanie = bufor;
Ale i tak jak zapiszesz tekst poprawnie, to będziesz widział w pliku nie krzaczki, a tekst właściwy. Nie ma fizycznej różnicy między zapisem binarnym a tekstowym - wszystko jest zapisywane binarnie, tylko niektóre bajty [lub dwubajty] reprezentują literę :P
Jak chcesz mieć krzaczkowanie/dekrzaczkowanie plików, to opracuj jakieś szyfrowanie tekstu przed zapisem.
"Konkluzja sprawy jest następująca":
Nie zapisuj brutalnie obiektów klasy std::string do pliku, gdyż wbrew pozorom bardzo mało prawdopodobne jest, żeby zawierały w sobie tekst.
Pozdrawiam,
TeMPOraL.