Я читаю двоичный файл как:
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 фактически считывает байт и преобразует его в широкий char. Поэтому, если у двоичного файла есть контент 0x112233...ff
, я действительно читаю 0x110022003300...ff00
.
Это не имеет большого значения для меня: во-первых, мне нужно использовать только большой поток, потому что имя файла не является латинским. Во-вторых, если я говорю, что fstream является двоичным, почему read
читает широкие символы? Следующий код делает то, что я хочу. Есть ли способ достичь этого, используя std fstream?
FILE* ifs = _wfopen(L"blah", L"rb");
while (!feof(ifs))
{
size_t numBytesRead = fread(buffer, 1, sizeof(buffer), ifs);
...
}