无法在C++中以字节模式读取二进制文件

PSX*_*ro1 0 c++ c++14

我试图读取二进制文件的数据,遗憾的是,在C++中打开这些数据与python有很大不同,因为它们具有字节模式.似乎C++没有那个.

for (auto p = directory_iterator(path); p != directory_iterator(); p++) {
    if (!is_directory(p->path()))
        byte tmpdata;
        std::ifstream tmpreader;
        tmpreader.open(desfile, std::ios_base::binary);
        int currentByte = tmpreader.get();
        while (currentByte >= 0)
        {
            //std::cout << "Does this get Called?" << std::endl;
            int currentByte = tmpreader.get();
            tmpdata = currentByte;
        }
        tmpreader.close()
    }
else
{
    continue;
}
Run Code Online (Sandbox Code Playgroud)

我基本上希望克隆Python在'rb'模式下打开文件的方法.要拥有所有内容的实际字节数据(因为它具有非打印字符,即使对于C++也是不可读的.大多数可能不能转换为有符号字符,因为它包含我需要在我的DLL中提供的zlib压缩数据解压缩所有.

我知道在Python中我可以这样做:

file_object = open('[file here]', 'rb')
Run Code Online (Sandbox Code Playgroud)

事实证明,用这个替换上面的C++代码会有所帮助.然而fopen,折旧但我不在乎.

上面的代码没有做的是工作,因为我没有读取缓冲区数据.我后来说明白fopen,fseek,fread,和fclose是我需要读取的字节模式("RB")的功能.

for (auto p = directory_iterator(path); p != directory_iterator(); p++) {
    if (!is_directory(p->path()))
    {
        std::string desfile = p->path().filename().string();
        byte tmpdata;
        unsigned char* data2;
        FILE *fp = fopen("data.d", "rb");
        fseek(fp, 0, SEEK_END); // GO TO END OF FILE
        size_t size = ftell(fp);
        fseek(fp, 0, SEEK_SET); // GO BACK TO START
        data2 = new unsigned char[size];
        tmpdata = fread(data2, 1, size, fp);
        fclose(fp);
    }
else
{
    continue;
}
Run Code Online (Sandbox Code Playgroud)

Aco*_*gua 5

int currentByte = tmpreader.get();
while (currentByte >= 0)
{
    //std::cout << "Does this get Called?" << std::endl;
    int currentByte = tmpreader.get();
    //^ here!
Run Code Online (Sandbox Code Playgroud)

您正在声明隐藏外部变量的第二个变量.但是,这个内部的只在while循环体内有效,所以while条件检查不再修改的外部变量.而是这样做:

int currentByte;
while ((currentByte = tmpreader.get()) >= 0)
{
Run Code Online (Sandbox Code Playgroud)