【问题标题】:Smalltalk (pharo): Using ZipArchive and write to stream instead of file?Smalltalk (pharo):使用 ZipArchive 并写入流而不是文件?
【发布时间】:2016-09-24 17:12:16
【问题描述】:

当我研究如何在 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 文件的正确方法吗?

【问题讨论】:

    标签: zip smalltalk pharo


    【解决方案1】:

    这个怎么样?

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

    【讨论】:

    • 我得到了同样的错误:不正确的存储到可索引对象中:(
    • 那你的图片有问题。上面的代码对我来说很好用(我使用的是 5.1-16548-32bit)。
    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多