Smalltalk(pharo):使用ZipArchive并写入流而不是文件?

时间:2016-09-24 17:12:17

标签: zip smalltalk pharo

当我在调查如何在Pharo中创建Zip文件时,我遇到了这个已解决的堆栈问题:How do you compress a directory in Squeak Smalltalk?

我探索了这个类,我发现你可以使用方法addString: 'string' as: 'myFile.txt'动态地为它添加字符串(如果我没错的话)。因此,下一步和最后一步是将其输出为流,因为我希望它能够在海边的锚点回调中动态生成,因此可以自动生成并下载而无需创建任何临时文件。

我尝试了很多组合,但我无法正确处理这个问题。另外,一个附带问题,如果提到的方法,如果字符串是二进制的,它会被视为字符串还是二进制文件?

感谢您的回复。

编辑:我发现方法writeTo: stream应该是我想要的,只是因为我不知道要为它创建哪种流。 WriteStream with: String new没有用。 ByteString new writeStream我总是得到Improper store into indexable object错误

EDIT2:我尝试了以下代码:

| z str |
z := ZipArchive new.
z
    addString: someBinaryPNGString as: 'myFile.png';
    addString: someBinaryPNGString as: 'another.png'.
str := "Initialize the stream here somehow"
z writeTo: str

其中someBinaryPNGString来自base64文本,并且"在这里以某种方式初始化流"是我失踪的部分。

这甚至是正确创建ZIP文件的正确方法吗?

1 个答案:

答案 0 :(得分:0)

这个怎么样?

member := ZipStringMember new contents: 'Hello world'.
zip := #[] writeStream.
member writeTo: zip
^zip contents