Дано:
std::locale empty();
std::locale locale(empty, new std::codecvt_utf8<wchar_t>);
std::wifstream stream;
stream.imbue(locale);
stream.open(fileName, std::ios_base::binary | std::ios::in);
stream
становится потоком wchar_t
объектов, поскольку они считываются из файла UTF-8, заданного fileName
.
ПРОБЛЕМА:
Я бы хотел перемещаться в потоке на основе wchar_t
. Тем не менее, это не похоже на работу.
Пример:
before = stream.tellg();
stream.read(&wcharBuffer[0], N);
loaded_n = stream.gcount();
after = stream.tellg();
Открыв файл в двоичном режиме, я ожидаю, что after - before = loaded_n
. Но не всегда содержит .
ВОПРОС:
Как можно перемещаться по наполненному std::wifstream
на основе фрагментов wchar_t
размера? То есть, например, stream.seekg(5)
должен доставить 5-й wchar_t
, сгенерированный из файла UTF8.