|
|
Class: ZipArchive
Object
|
+--ZipArchive
- Package:
- stx:libbasic2
- Category:
- System-Support-FileFormats
- Version:
- rev:
1.82
date: 2010/02/02 11:11:36
- user: cg
- file: ZipArchive.st directory: libbasic2
- module: stx stc-classLibrary: libbasic2
- Author:
- Claus Gittinger
provides access to a zip archive.
Caveat: the only compression method (for now) is deflate.
Signal constants
-
unsupportedZipFileFormatErrorSignal
-
-
zipFileFormatErrorSignal
-
class initialization
-
initialize
-
cleanup
-
flush
-
forget about cached zipArchives
-
installFlushBlock
-
forget about cached zipArchives
-
lowSpaceCleanup
-
forget about cached zipArchives
constants
-
COMPR_DEFLATED
-
please use compressionDeflated instead (Squeak compat.)
-
COMPR_STORED
-
please use compressionStored instead (Squeak compat.)
-
LREC_SIZE
-
-
centralDirectoryMinimumSize
-
-
compressionDeflated
-
same as COMPR_DEFLATED - squeak compatibility
-
compressionStored
-
same as COMPR_STORED - squeak compatibility
-
streamBufferSize
-
debugging
-
debugTrace: aBoolean
-
instance creation
-
newFileNamed: name
-
-
oldFileNamed: name
-
-
oldFileNamed: name startOfArchive: startOfArchive endOfArchive: endOfArchive
-
-
readingFrom: aPositionableStream
-
open an existing Zip archive - read data from aPositionableStream
-
writingTo: aPositionableStream
-
open an new Zip archive - write data to aPositionableStream
queries
-
isZipArchive: aFilename
-
answer true, if aFilename references a Zip archive
accessing
-
entries
-
return a collection of fileName entries
-
fileSize
-
-
members
-
return a collection of members
-
membersMatching: aFileMatchPattern
-
return a collection of members which match aFileMatchPattern
-
name
-
return the (file-)name of this zipArchive
-
pathName
-
FileStream compatibility: answer the name of the underlying file - a String
-
setArchiveStartPosition: aStartposition endPosition: anEndPosition
-
-
size
-
finalization
-
finalizationLobby
-
answer the registry used for finalization.
-
finalize
-
some Stream has been collected - close the file if not already done
open/close
-
close
-
-
name: archiveFileName mode: readOrWriteMode
-
open read or writestream on archiveFileName
-
readFrom: aPositionableStream
-
initialize the archive to read from aPositionableStream
-
readingFrom: aPositionableStream
-
initialize the archive to read from aPositionableStream
-
writingTo: aPositionableStream
-
initialize the archive to read from aPositionableStream
private
-
checkZipArchive: archiveFileName
-
-
closeFile
-
close the stream - tell operating system
-
openFile
-
-
setDefaultArchiveBounds
-
set start and end of archive if it is nil. That means no bounds have been defined
before. In that case the archive is the complete file.
-
validZipFileNameFrom: zipFileName
-
private-decompression
-
decode: rawBytes method: compressionMethod size: uncompressedSize
-
-
inflate: inBytes to: outBytes
-
private-directory stuff
-
addCentralZipDirectory
-
-
addMember
-
add a zipMember
-
addMember: zmemb
-
add a zipMember
-
checkZipArchive
-
read the zip directory into a linked-list of zipMembers
-
findMember: name
-
find a zipMember by name
-
readDirectory
-
read the zip directory into a linked-list of zipMembers
-
searchForEndOfCentralDirectorySignature
-
read the zip directory into a linked-list of zipMembers
-
zipMembersDo: aBlock
-
evaluate aBlock for all zipMembers
reading
-
extract: fileName
-
extract an entry identified by fileName as a byteArray;
nil on errors
-
extract: fileName intoStream: aWriteStream
-
extract an entry indentified by filename into aWriteStream
return false on error
-
restoreOsDirectory: osDirectoryName fromArchiveDirectory: archiveDirectoryName
-
reading - stream
-
readStreamFor: nameOfFileInArchive
-
open a stream on archive contents identified by nameOfFileInArchive
testing
-
isValidPath: anArchivePathName
-
writing
-
addArchiveDirectory: archiveDirectoryName fromOsDirectory: osDirectoryName
-
-
addArchiveDirectory: archiveDirectoryName fromOsDirectory: osDirectoryName compressMethod: theCompressMethod
-
-
addArchiveDirectoryCompressed: archiveDirectoryName fromOsDirectory: osDirectoryName
-
-
addDirectory: aDirectoryName
-
do not create directories (isDirectory = true) - they are not compatible between operating systems
** This is an obsolete interface - do not use it (it may vanish in future versions) **
-
addFile: aFileName fromStream: aStream
-
-
addFile: aFileName fromStream: aStream compressMethod: theCompressMethodArg
-
-
addFile: aFileName fromStream: aStream compressMethod: theCompressMethodArg asDirectory: isDirectory
-
do not create directories (isDirectory = true) - they are not compatible between operating systems
-
addFile: aFileName withContents: data
-
-
addFile: aFileName withContents: data compressMethod: theCompressMethodArg asDirectory: isDirectory
-
do not create directories (isDirectory = true) - they are not compatible between operating systems
-
addFileCompressed: aFileName fromStream: aStream
-
-
addFileCompressed: aFileName withContents: data
-
-
addString: aString as: path
-
writing - stream
-
compressedWriteStreamFor: nameOfFileInArchive
-
create new entry in central directory
-
writeStreamFor: nameOfFileInArchive compressMethod: theCompressMethodArg
-
create new entry in central directory
AbstractZipStream
ZipCentralDirectory
ZipMember
ZipReadStream
ZipWriteStream
|zip bytes|
zip := ZipArchive oldFileNamed:'foo.zip'.
bytes := zip extract:'bar'.
zip closeFile.
|
|zip bytes|
zip := ZipArchive oldFileNamed:'source/stx/libbasic2.zip'.
zip entries do:[:entry |
Transcript showCR:entry
].
zip closeFile.
|
|zip bytes|
zip := ZipArchive oldFileNamed:'source/stx/libbasic2.zip'.
bytes := zip extract:'TwoByteStr.st'.
zip closeFile.
Transcript showCR:(bytes asString).
|
compatibility write check with winzip (compressed with deflate)
|zipwr testDirectory testFileWr|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileWr := 'crcTest_resume_compressed.zip'.
zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
zipwr addFile:'crcTest_resume_compressed.txt' withContents: 'resume'.
zipwr closeFile.
|
compatibility read check with winzip (compressed with deflate)
|ziprd testDirectory testFileRd contents|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileRd := 'crcTest_resume_compressed.zip'.
ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
contents := ziprd extract: ziprd entries first.
contents inspect.
ziprd closeFile.
|
compatibility write check with winzip (uncompressed)
|zipwr testDirectory testFileWr|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileWr := 'crcTest_resume_uncompressed.zip'.
zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
zipwr addFile:'crcTest_resume_uncompressed.txt'
withContents:'resume'
compressMethod:0
asDirectory:false.
zipwr closeFile.
|
compatibility read check with winzip (uncompressed)
|ziprd testDirectory testFileRd contents|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileRd := 'crcTest_resume_uncompressed.zip'.
ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
contents := ziprd extract: ziprd entries first.
contents inspect.
ziprd closeFile.
|
read an archive with files and/or directories, fetch the entries
and create a new archive with the same content
|ziprd zipwr entryDict testDirectory testFileRd testFileWr|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileRd := 'projects.zip'.
testFileWr := 'projects_expecco_test.zip'.
ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
entryDict := Dictionary new.
ziprd entries do: [:aFileName|
entryDict at:aFileName put:(ziprd extract: aFileName) asString.
].
ziprd closeFile.
zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
entryDict keysAndValuesDo: [:key :value|
(value size == 0) ifTrue: [
zipwr addDirectory:key.
] ifFalse: [
zipwr addFile:key withContents:value
].
].
zipwr closeFile.
|
|zipwr ziprd testDirectory testFileWr testFileRd zs|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileWr := 'crcTest_resume_compressed.zip'.
zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
zipwr addFile:'crcTest_resume_compressed.txt' withContents: 'Das ist ein test, das ist ein test, das ist ein test'.
zipwr close.
testFileRd := 'crcTest_resume_compressed.zip'.
ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
zs := ziprd readStreamFor: 'crcTest_resume_compressed.txt'.
zs inspect.
ziprd close.
|
|zipwr ziprd testDirectory testFileWr testFileRd rs result|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileWr := 'readStreamTest_HelloWorld.zip'.
zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
zipwr addFile:'readStreamTest_HelloWorld.txt' withContents: 'Hello World!' compressed: false.
zipwr close.
testFileRd := 'readStreamTest_HelloWorld.zip'.
ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
rs := ziprd readStreamFor: 'readStreamTest_HelloWorld.txt'.
result := ''.
[ rs atEnd ] whileFalse: [
result := result, (rs nextAvailable:5).
].
result inspect.
rs close.
ziprd close.
|
read an archive with files and/or directories and/or zipArchives,
fetch the entries (also from the include zip archives)
and create a new archive
|ziprd zipwr entryDict testDirectory testFileRd testFileWr zipRdSub1 zipRdSub2|
testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
testFileRd := 'ZipInZipFileTest.zip'.
testFileWr := 'ZipInZipFileTest_generated.zip'.
ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
entryDict := Dictionary new.
ziprd entries do: [:aFileName|
Transcript showCR: 'processing in top: ', aFileName.
(aFileName endsWith:'.zip') ifTrue: [
zipRdSub1 := ziprd extractArchive: aFileName.
zipRdSub1 entries do: [:aFileName1|
Transcript showCR: 'processing in sub 1: ', aFileName1.
(aFileName1 endsWith:'.zip') ifTrue: [
zipRdSub2 := zipRdSub1 extractArchive: aFileName1.
zipRdSub2 entries do: [:aFileName2|
Transcript showCR: 'processing in sub 2: ', aFileName2.
(aFileName2 endsWith:'.zip') ifTrue: [
self halt.
] ifFalse: [
entryDict at:aFileName2 put:(zipRdSub2 extract: aFileName2) asString.
].
].
zipRdSub2 closeFile.
] ifFalse: [
entryDict at:aFileName1 put:(zipRdSub1 extract: aFileName1) asString.
].
].
zipRdSub1 closeFile.
] ifFalse: [
entryDict at:aFileName put:(ziprd extract: aFileName) asString.
].
].
ziprd closeFile.
zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
entryDict keysAndValuesDo: [:key :value|
(value size == 0) ifTrue: [
zipwr addDirectory:key.
] ifFalse: [
zipwr addFile:key withContents:value
].
].
zipwr closeFile.
|
|