Как использовать std::wifstream для чтения его содержимого как std::wstring

Я пытаюсь это:

std::wstringstream wstrStream;
std::wifstream wifStream(str.c_str());
wifStream >> wstrStream;

но я получил эту ошибку компиляции:

     error C2664: 'std::basic_istream<_Elem,_Traits>::_Myt &std::basic_istream<_Elem,_Traits>::operator >>
(std::basic_istream<_Elem,_Traits>::_Myt &(__cdecl *)
(std::basic_istream<_Elem,_Traits>::_Myt &))' : cannot convert parameter 1 from
'std::wstringstream' to 'std::basic_istream<_Elem,_Traits>::_Myt &(__cdecl *)
(std::basic_istream<_Elem,_Traits>::_Myt &)'
            with
            [
                _Elem=wchar_t,
                _Traits=std::char_traits<wchar_t>
            ]
            and
            [
                _Elem=wchar_t,
                _Traits=std::char_traits<wchar_t>
            ]

Я понимаю, что оператор >> не реализован для wchar_t.

Я нашел немного документации и ссылок на std::wifstream. Как бы вы использовали это?

2 ответа

Решение

Оператор >> не определен для двух потоков. Если вы хотите прочитать строку из пробела в файле, используйте

std::wstring s;
wifStream >> s;

Если вы хотите скопировать весь файл в поток строк, используйте

wstrStream << wifStream.rdbuf();

Вам не нужно использовать wstringstream где-либо здесь - wifstream - это поток wstring под капотом. Вам просто нужно извлечь непосредственно в std::wstring.

Другие вопросы по тегам