【问题标题】:Create zip with a precise fixed size创建具有精确固定尺寸的 zip
【发布时间】:2019-12-11 21:49:54
【问题描述】:

我想创建一个特定大小的 zip 文件,例如 10.000.000 字节。
假设我必须压缩多个文件,压缩后它们总计为 8.123.456 字节(随机数)。
我想添加“垃圾”以达到完全我选择的大小(在本例中为 10Mb)。

当然,我假设我必须压缩的文件不超过我的限制。

我对此没有任何特定的语言要求。

【问题讨论】:

    标签: language-agnostic zip archive


    【解决方案1】:

    您可以在目标 Zip 文件添加“垃圾”文件而不进行压缩。 添加的大小将是“垃圾”文件的大小,加上 76 个字节,再加上“垃圾”文件名称长度的两倍。一些压缩工具会在此基础上添加额外的元数据。

    【讨论】:

      【解决方案2】:

      只需连接一个“垃圾”文件和一个与您的 10Mb 匹配的有效 Zip 文件。 Zip 格式就是为这种情况而设计的。通常,您可以连接可执行文件和 Zip 文件以制作安装程序或自解压存档。

      这里是一个例子(我连接了一个随机选择的 GIF 和一个 Zip)。 Info-Zip 解压工具说:

      unzip -v appended.zip
      Archive:  appended.zip
      warning [appended.zip]:  1772887 extra bytes at beginning or within zipfile
        (attempting to process anyway)
       Length   Method    Size  Ratio   Date   Time   CRC-32    Name
      --------  ------  ------- -----   ----   ----   ------    ----
           186  Defl:N      140  25%  15.02.12 12:03  56202537  zip-ada/debg_za.cmd
           349  Defl:N      202  42%  10.02.12 22:19  7718ccec  zip-ada/debug.pra
          4357  Defl:N     1381  68%  24.09.16 06:43  30f2fef0  zip-ada/demo/demo_csv_into_zip.adb
          1015  Defl:N      513  50%  02.10.18 15:49  f0edcf97  zip-ada/demo/demo_unzip.adb
           603  Defl:N      310  49%  20.03.16 08:26  b3906614  zip-ada/demo/demo_zip.adb
        161483  Defl:N    39845  75%  27.08.16 16:35  9f24d1fe  zip-ada/doc/appnote.txt
      ...
      

      解压测试成功(如预期):

      unzip -t appended.zip
      Archive:  appended.zip
      warning [appended.zip]:  1772887 extra bytes at beginning or within zipfile
        (attempting to process anyway)
          testing: zip-ada/debg_za.cmd      OK
          testing: zip-ada/debug.pra        OK
          testing: zip-ada/demo/demo_csv_into_zip.adb   OK
          testing: zip-ada/demo/demo_unzip.adb   OK
          testing: zip-ada/demo/demo_zip.adb   OK
          testing: zip-ada/doc/appnote.txt   OK
          testing: zip-ada/doc/lzma-specification.txt   OK
      ...
      No errors detected in compressed data of appended.zip.
      

      【讨论】:

      • 有没有办法使用 zip 命令进行连接?或者我应该用另一个文件或字符串编码一个连接?
      • 只需将 Zip 文件附加到“垃圾”文件之后。在我的示例中,使用 Windows 命令行 (cmd.exe):复制 /b rubbish.gif + archive.zip appended.zip
      • 非常好的解决方案。
      【解决方案3】:

      将压缩后的数据包装在另一个文件中,格式如下:

      <zip file length><zip file content><random data until size is as required>
      

      您知道随机数据的数量,因为它是所需大小减去文件长度再减去文件长度表示的大小。

      要解压,只需反转该过程即可。

      【讨论】:

      • “换行”是什么意思?你能提供一个实际的例子吗?
      猜你喜欢
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多