当前位置: 首页 > 知识库问答 >
问题:

用Pharo创建zip文件

薛扬
2023-03-14

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

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.

同样,addfile:/addfile:as:也是不可用的,因为该实现只能在实际磁盘上工作,而不能在内存中工作。

那么,是否有其他方法(或外部库),我可以压缩我的数据,而不需要转储所有文件到磁盘,压缩到那里,并读取最后的文件回来?

共有1个答案

魏宸
2023-03-14

试试看:

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

 类似资料:
  • 问题内容: 我正在尝试将 文件 从 一个文件夹 保存到 另一个 文件夹 。 zip文件夹 放置在其他目录中。而且我编写了以下代码: archive.php 但是可惜我无法创建.zip文件夹。我错过了任何一步吗? 问题答案: TEST是您的项目文件夹名称。 您可以根据需要定义路径。

  • 我使用log4j2在文本文件中记录用户活动。现在我想创建一个用户活动的zip文件。但我想这样。我创建了一个日常用户日志活动的文本文件。所以我有七个7天的文本文件。第8天文本文件创建七天后,第一天文本文件应转换为zip文件。所以,当第8天文本文件创建时,像第一天文本文件这样的预期行为应该是zip文件,其他第2到第8天文本文件应该是文本格式。 =============================

  • 问题内容: 这是我用来创建带有密码的文件的代码 但是它设置密码而不是密码,符号将被忽略。为什么? 问题答案: ^字符是命令外壳程序中的转义字符。尝试加倍。

  • 问题内容: 我有一个动态文本文件,可以根据用户的查询从数据库中选择内容。我必须将此内容写入文本文件,并将其压缩在servlet的文件夹中。我应该怎么做? 问题答案: 看这个例子: 这将在D:named 的根目录中创建一个文件,其中将包含一个名为的单个文件。当然,你可以添加更多的zip条目,还可以指定一个子目录,如下所示:

  • 我试图在ZIP文件内创建一个ZIP文件,以重新构建以前在内存中的zip结构,我在Java。 我失败了,因为我得到了一个错误的内部ZIP内创建的初始ZIP文件。文件已损坏。当试图打开它时,我得到一个“文件的意外结局”。 我得到了这个结构: -input.zip--InnerInput.zip 代码使用java Stack和Map在内存中解压。然后它创建input2.zip,内部nput.zip。 总

  • Pharo的目标是提供一个简洁新颖的开源Smalltalk开发环境。Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境(IDE)。Smalltalk由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有: