C ++: потоковая навигация в контексте 'wifstream :: imbue ()' - PullRequest
0 голосов
/ 01 июня 2019

Дано:

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.

...