难以理解二进制文件读取

问题描述 投票:1回答:2

下面是一些代码,据我所知,这些代码读取二进制文件。我已经评论了我相信会发生的事情,但是我在识别确切的内存块/存储的内容方面遇到了麻烦。它是整个二进制文件吗?

void BinaryFiles(string sfile){
    streampos size;                               //creates object to store size of file
    unsigned char* memblock;
    ifstream file(sfile, ios::in | ios::binary);  //creates file object(which opens file)
    if (file.is_open())
    {
        file.seekg(0, ios::end);                 //find end of file
        size = file.tellg();                     //sets size equal to distance from beginning
        memblock = new unsigned char[size];      //dynamically allocates memblock to char array
        file.seekg(0, ios::beg);                 //find beginning of file
        file.read((char*)memblock, size);        //this is where confusion begins
        cout << memblock << endl;                //what am I printing?
        file.close();
        delete[] memblock;
}
}
c++ binaryfiles
2个回答
1
投票

[memblock分配有new unsigned char[size];,其中sizesfile给定的文件大小。

file.seekg(0, ios::end);
size = file.tellg();

前两行用于获取文件的大小

file.read((char*)memblock, size);

然后继续将文件内容读入memblock。因此,为回答您的问题, memblock将存储文件的全部内容。

来自std::basic_istream<CharT,Traits>::read

从流中提取字符。

表现为UnformattedInputFunction。施工后检查哨兵对象,提取字符并将其存储为连续的第一个元素由指向的字符数组的位置s。提取并存储字符,直到出现以下任何情况条件发生:

  • [已提取并存储了字符数

  • 文件条件结束出现在输入序列上(在这种情况下,将调用setstate(failbit | eofbit))。成功次数可以使用gcount()查询提取的字符。

最后当您这样做:

std::basic_istream<CharT,Traits>::read

这将打印已读入cout << memblock << endl; ]的文件的内容


0
投票
//这是混乱开始的地方
© www.soinside.com 2019 - 2024. All rights reserved.