Как вы сжимаете каталог в Squeak Smalltalk? Я нашел метод compressFile в StandardFileStream, но я не могу понять, как сжать несколько файлов или каталог. Я экспериментировал с классами System-Compression, но не имел большой удачи. Заранее спасибо!Как сжать каталог в Squeak Smalltalk?
Это то, что у меня есть сейчас. Я добавляю метки времени в конце имен файлов, поэтому здесь я хочу поместить все файлы, начинающиеся с указанного имени файла, в файл 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.
Не могли бы вы опубликовать фрагмент кода, который вы пробовали и не работали. –
Я просто добавил то, что у меня есть сейчас. Он работает, но когда я пытаюсь разархивировать его в терминале, я получаю эту ошибку: подпись в конце-центральной директории не найдена. Либо этот файл не является zipfile, либо он представляет собой один диск из многочастного архива. В последнем случае центральный каталог и комментарий zipfile будут найдены на последним диском (-ами) этого архива. unzip: не удается найти каталог zipfile в одном из test1.zip или test1.zip.zip и не может найти test1.zip.ZIP, period. –