【问题标题】:Creating zip files in Pharo在 Pharo 中创建 zip 文件
【发布时间】:2018-03-27 08:13:33
【问题描述】:

如何在 Pharo 中创建 zip 文件并将其写入磁盘?

我想我可以在 MemoryStore 中创建结构,然后按以下方式压缩它

root := FileSystem memory root ensureCreateDirectory.

root / 'sample.txt' writeStreamDo: [ :stream | stream << String loremIpsum ].

archive := ZipArchive new.
root allChildren select: #isFile thenDo: [ :each |
    each readStreamDo: [ :readStream |
        archive addString: readStream contents as: each fullName
    ]
].
archive writeTo: someFinalWriteStream.

archive close.

但显然通过addString:as: 添加的数据根本没有被压缩。

同样addFile:/addFile:as: 不可用,因为该实现仅适用于真实磁盘,而不适用于内存。

那么有没有其他方法(或外部库)可以压缩我的数据,而无需将所有文件转储到磁盘、压缩到那里并读回最终文件?

【问题讨论】:

    标签: zip compression smalltalk pharo


    【解决方案1】:

    尝试以下方式:

    string := String new: 14 withAll: $1.
    archive := ZipArchive new.
    member := zip addDeflateString: string as: 'filename.ext'.
    member instVarNamed: 'compressionMethod' put: 8.
    member rewindData.
    zip := ByteArray streamContents: [:strm | member compressDataTo: strm].
    

    注意我已经强制设置compressionMethod,一定有更好的方法来做到这一点,我相信你会找到它;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多