解压文件crc错误,izip解压失败再试一次
转载自:http://blog.Sina.com.cn/s/blog _ 61078790102 xcnv.html
百度网盘压缩下载文件CRC校验错误的解决方案
通过打包压缩从百度网盘下载的文件,解压时会遇到CRC校验错误。这里有两个盒子:
A.如果文件大小小于4G,可以用国内好的出版社解决,解决的文件是正确的。b .如果文件大小大于4G,则求解的文件大小是错误的。
针对文件大小问题,从初步分析,百度网盘提供的压缩包下载采用zip存储方式压缩,zip格式为4294967295字节=4g=原始/压缩文件大小超过0xFFFFFFFF。
举个例子,假设你从百度下载了一部电影。实际大小是18,745,396,529字节(0x 04 5D 50 0D 31))。在7z解压缩会导致crc校验错误。好的压力下解压的文件只有1565527345字节。打开这个压缩文件,可以看到显示的文件大小是错误的,是1,565,527,345字节(0x 5D 50 0D 31)。
原因是zip格式只保存了4个字节的原始/压缩文件大小,省略了实际大小顶部的0x04,导致文件大小设置错误。
A.显示的压缩文件大小:
B.对应于压缩和未压缩文件大小的压缩文件中的字节数
解决方法如下。
A.如果文件大小大于4G,请下载为单独的压缩文件(单独放在一个文件夹中,然后再下载这个文件夹)。百度用store的方法打包压缩,也就是不压缩文件,下载后可以删除文件的zip头尾。
B.删除文件头,即找到文件实际内容开始的偏移量:
a)在开头找到第二个0x 04034 b 50(zip头的开始标志),提取第一个对应的文件目录信息,这里是0x3B;
1.如果文件本身是zip文件,请特别注意。以下是文件头显示,请勿删除。2.请注意,下图中的zip头看起来像0x50 4B 03 04。这是因为文件是以小端字节顺序保存的。尽管可以参考特定报头的含义,
b)跳过0x1E长度(zip文件头的固定长度)。即定位0x59,直观记录前4个字节(文件名的前4个字节),记录两个2字节。注意方向。下面的数字是0x00 78和0x00 00,分别对应文件名的长度和zip文件额外字段的长度。
c)从0x59开始,跳过0x78的长度(即文件名0x78额外字段0x00的长度),从0xD1开始。这里,从文件的内容开始,删除所有以前的内容。
C.删除拉链的末端。的最后一个0x16字节以0x06 05 4B 50开始。该0x16(22字节0xC-0x10(即13-16))的第4个字节是0x00000f1。从上面跳过0xF1,选择从这里删除到最后。简单的方法是从末尾开始查找0x02 01 4B 50。(请注意字节顺序。下图为0x50 4B 01 02。)找到第二个,从第二个开始)删除0x50 4B到最后的所有内容。之后,用正确的文件名保存它。如果新文件的大小是18,745,396,529字节,从侧面验证了新文件的大小是正确的,没有损坏。
请特别注意。如果下载的文件本身是一个zip文件,将会显示许多文件标签。
如果你想偷懒,请用我的python解压,对应多个文件/多个文件夹/超大文件(4G)。如果你也用python的话。)
用法:
单个文件:python unzip_baidu.py pack.zip
python unzip _ Baidu . pyd: temp pack . zip
多个文件:Python unzip _ Baidu . py pack . zip pack _ 2 . zip
python unzip _ Baidu . pyd: temp pack . zipd: temp pack _ 2。活力