Как использовать 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.