ďťż

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