gpt4 book ai didi

compression - 如何在 Squeak Smalltalk 中压缩目录?

转载 作者:行者123 更新时间:2023-12-05 00:28:39 46 4
gpt4 key购买 nike

如何在 Squeak Smalltalk 中压缩目录?我在 StandardFileStream 中找到了 compressFile 方法,但我不知道如何压缩多个文件或目录。我尝试了 System-Compression 类,但运气不佳。提前致谢!

这就是我现在所拥有的。我在文件名的末尾添加时间戳,所以在这里我想把所有以给定文件名开头的文件放入一个 zip 或 gzip 文件中。

compressFile: aFileName in: aDirectory

| zipped buffer unzipped zipFileName |
zipFileName _ aFileName copyUpTo: $. .
zipped _ aDirectory newFileNamed: (zipFileName, FileDirectory dot, 'zip').
zipped binary; setFileTypeToObject.
zipped _ ZipWriteStream on: zipped.
buffer _ ByteArray new: 50000.
aDirectory fileNames do: [:f |
(f beginsWith: zipFileName) ifTrue: [
unzipped _ aDirectory readOnlyFileNamed: (aDirectory fullNameFor: f).
unzipped binary.
[unzipped atEnd] whileFalse:[
zipped nextPutAll: (unzipped nextInto: buffer)].
unzipped close]].
zipped close.

最佳答案

ZipWriteStream只是一个用于压缩的辅助类,它不知道一个合适的 ZIP 文件是如何布局的,包括所有的头和目录信息等。你想使用 ZipArchive类(class)。

"first, construct archive layout in memory"
zip := ZipArchive new.
zip addFile: 'foo.txt'.
zip addFile: 'bar.txt' as: 'xyz.txt'.
zip addTree: dir match: [:entry | entry name beginswith: 'baz'].
"then, write archive to disk, compressing each member"
file := dest newFileNamed: 'test.zip'.
zip writeTo: file.
file close.

关于compression - 如何在 Squeak Smalltalk 中压缩目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541751/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com