我的主要问题是,当读取任何.zip文件时,它不会正确地将数据读入结构中,因此即使文件名正确,filenameLength属性也会设置为0。我用zip.seekg(26)测试并读取了给我正确值的值,这让我觉得我的结构有问题。所以我打印出我的结构的大小,它给出了32,即使所有属性大小加起来等于30.我做错了什么?
struct ZIPHeader
{
int sig; // 4
short versionMadeBy; // 6
short extractorversion; // 8
short genflag; // 10
short lastModificationTime; // 12
short lastModificationDate; // 14
int crc; // 18
int compressedSize; // 22
int uncompressedSize; // 26
short filenameLength; // 28
short extraFieldLength; // 30
} zheader;
void PrintZipInfo(const char* dir)
{
cout << "Sizeofheader: " << sizeof(ZIPHeader) << endl;
ifstream zip(dir, ios::binary);
zip.read((char *)&zheader, sizeof(ZIPHeader));
cout << "File name length: " << zheader.filenameLength << endl;
}
输出
Sizeofheader:32
文件名长度:0