我正在以以下方式读取二进制文件:
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,因为文件名是非拉丁文。其次,如果我说fstream是二进制的,为什么read
会读取宽字符?下面的代码实现了我想要的效果。是否有一种方法可以使用std fstream实现相同的效果?
FILE* ifs = _wfopen(L"blah", L"rb");
while (!feof(ifs))
{
size_t numBytesRead = fread(buffer, 1, sizeof(buffer), ifs);
...
}
const char *
(请参见标准)。wchar_t版本是编译器扩展,它适用于Microsoft C++编译器,这可能是OP使用的编译器。我的代码在他的实现上可以正常工作,因为他已经使用了这个扩展。所以,请不要因为你没有验证或理解我说的话而投反对票,你可能是错的。 - Yakov Galka