[C++] std::wfstream - zapis liczb i wstringów do pliku *.bin
Ostatnio zmodyfikowano 2016-03-17 00:19
carlosmay Temat założony przez niniejszego użytkownika |
[C++] std::wfstream - zapis liczb i wstringów do pliku *.bin » 2016-03-16 10:46:32 std::wcerr.imbue( std::locale( "Polish_poland.852" ) ); using set = std::set < std::wstring, std::less <>>; std::wfstream file( L"test.bin", std::ios::in | std::ios::out | std::ios::trunc ); if( file.is_open() ) { file.imbue( std::locale( "Polish_poland.852" ) ); std::wstring wstr = L"Jaśka"; set slowa( { L"Koleś", L"Jeść" } ); file.write( wstr.c_str(), wstr.size() + 1 ); std::size_t rozmiar = slowa.size(); for( const std::wstring & el: slowa ) file.write( el.c_str(), el.size() + 1 ); } else { std::wcerr << L"Wystąpił problem z plikiem" << std::endl; } Ustawiona jest polska strona kodowa. W tej postaci wszystko prawidłowo zapisuje do pliku. Chcę zapisać do pliku rozmiar kontenera set slowa. Wystarczy, że odkomentuję ten fragment i w pliku nic się nie pojawia. Edit: Właśnie dopatrzyłem się braku std::ios::binary. Zweryfikuję wieczorem, czy tylko w tym problem. |
|
j23 |
» 2016-03-16 14:25:30 Trochę bez sensu. Jeśli plik jest plikiem binarnym, to po kiego grzyba to locale i wfstream? Użyj zwykłego ofstream, otwórz w trybie binarnym ( ios::binary), a napisy konwertuj do utf-8. Coś w ten deseń: std::wstring_convert < std::codecvt_utf8_utf16 < wchar_t > > converter; using set = std::set < std::wstring, std::less <>>;
std::ofstream file( "test.bin", std::ios::binary | std::ios::trunc ); if( file.is_open() ) { std::wstring wstr = L"Jaśka"; set slowa( { L"Koleś", L"Jeść" } ); std::string u8s = converter.to_bytes( wstr ); file.write( u8s.c_str(), u8s.size() + 1 ); std::size_t rozmiar = slowa.size(); file.write(( char * ) & rozmiar, sizeof( std::size_t ) ); for( const std::wstring & el: slowa ) { u8s = converter.to_bytes( el ); file.write( u8s.c_str(), u8s.size() + 1 ); } }
|
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2016-03-17 00:19:03 Jeśli plik jest plikiem binarnym, to po kiego grzyba to locale i wfstream? |
Tak mi się wydawało najprościej. Dzięki temu upieczone dwie pieczenie. Dzięki Dżej. |
|
« 1 » |