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

std::wstring binarnie - czyli jak zapisać i wczytać

Ostatnio zmodyfikowano dzisiaj: 3h » 10 min
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
std::wstring binarnie - czyli jak zapisać i wczytać
» 2025-11-18 16:55:05
Jak zapisać i wczytać binarnie std::wstring w pliku?

C/C++
class Saver {
public:
   
std::ostream & file;
   
   
Saver( std::ostream & file )
        :
file( file )
   
{ }
   
   
void save_string( const std::string & str ) {
       
uint16_t str_len = static_cast < uint16_t >( str.size() );
       
file.write( reinterpret_cast < const char * >( & str_len ), sizeof( str_len ) );
       
file.write( str.data(), str_len );
   
}
   
   
// ponizsza funkcja chyba nie działa
   
void save_wstring( const std::wstring & wstr ) {
       
uint16_t wstr_len = static_cast < uint16_t >( wstr.size() );
       
file.write( reinterpret_cast < const char * >( & wstr_len ), sizeof( wstr_len ) );
       
file.write( reinterpret_cast < const char * >( wstr.data() ), wstr_len * sizeof( wchar_t ) );
   
}
   
}
;

C/C++
class Reader {
   
std::istream & is;
   
public:
   
Reader( std::istream & is )
        :
is( is )
   
{ }
   
   
std::string read_string() {
       
uint16_t len;
       
is.read( reinterpret_cast < char * >( & len ), sizeof( uint16_t ) );
       
       
std::string str( len, '\0' ); // utwórz pusty string o długości len
       
is.read( & str[ 0 ], len ); // bezpieczne wczytanie danych do stringa
       
return str;
   
}
   
   
// ponizsza funkcja chyba nie działa
   
std::wstring read_wstring() {
       
uint16_t len;
       
is.read( reinterpret_cast < char * >( & len ), sizeof( uint16_t ) );
       
std::wstring wstr( len, L'\0' ); // utwórz pusty wstring o długości len
       
is.read( reinterpret_cast < char * >( & wstr[ 0 ] ), len * sizeof( wchar_t ) ); // bezpieczne wczytanie danych do wstringa
       
return wstr;
   
}
}
;
P-183504
pekfos
» 2025-11-18 16:59:15
A jaki jest problem?
P-183505
tBane
Temat założony przez niniejszego użytkownika
» 2025-11-18 17:00:37
Wczytuje mi niepoprawnie std::wstring (tylko jeden znak '|') stąd wiem, że co najmniej jedna z tych funkcji jest błędna.
P-183506
pekfos
» 2025-11-18 17:02:28
A nie użyłeś czasem read_string zamiast read_wstring?
P-183507
tBane
Temat założony przez niniejszego użytkownika
» 2025-11-18 17:08:42
Ok jednak działa... W innej funkcji była odwrotna kolejność działań. Przepisałem kod na pojedyncze kroki i zaczęło działać :D Dzięki za pomoc kod jest rzeczywiście dobry :D
P-183508
« 1 »
  Strona 1 z 1