在Pharo中创建zip文件

3

如何在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:也无法使用,因为实现只能使用真正的磁盘,而非内存。

那么有没有其他方法(或外部库)可以在不必把所有文件都转储到磁盘、在磁盘上对其进行压缩并读取最终文件的情况下对数据进行压缩呢?

1个回答

3

尝试类似以下的操作:

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,肯定有更好的方法来实现这一点,相信你会找到的;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接