Я читаю двоичный файл как:
const size_t stBuffer = 256;
char buffer[stBuffer];
std::wstring wPath(L"blah");
std::wifstream ifs(wPath.c_str(), std::wifstream::in | std::wifstream::binary)
while (ifs.good())
{
ifs.read(buffer, sizeof(buffer));
...
}
Но я понимаю, что это не настоящее двоичное чтение.На самом деле ifstream читает байт и преобразует его в широкий символ.Так что, если бинарный файл имеет содержимое 0x112233...ff
, я на самом деле читаю 0x110022003300...ff00
.
Это не имеет особого смысла для меня: во-первых, мне нужно использовать только широкий поток, потому что имя файлане латынь.Во-вторых, если я скажу, что fstream является двоичным, почему read
читает широкие символы?Код ниже делает то, что я хочу.Есть ли способ добиться этого с помощью стандартных потоков?
FILE* ifs = _wfopen(L"blah", L"rb");
while (!feof(ifs))
{
size_t numBytesRead = fread(buffer, 1, sizeof(buffer), ifs);
...
}