下面是一些代码,据我所知,这些代码读取二进制文件。我已经评论了我相信会发生的事情,但是我在识别确切的内存块/存储的内容方面遇到了麻烦。它是整个二进制文件吗?
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;
}
}
[memblock
分配有new unsigned char[size];
,其中size
是sfile
给定的文件大小。
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;
]的文件的内容
//这是混乱开始的地方