#UI_ENHANCEMENT by cg
class: ZipArchive
useful errormessages (incl. filename)
in open errors.
changed:
#name:mode:
#readStreamFor:
#readingFrom:
--- a/ZipArchive.st Sat May 18 13:09:58 2019 +0200
+++ b/ZipArchive.st Tue May 21 20:52:18 2019 +0200
@@ -3369,14 +3369,14 @@
filename := name asFilename.
(readOrWriteMode = #read and:[filename exists not]) ifTrue:[
- ^ OpenError raiseRequestWith:filename errorString:' - file does not exist'.
+ ^ OpenError raiseRequestWith:filename errorString:(' - file does not exist: "%1"' bindWith:filename pathName).
].
filename isDirectory ifTrue:[
- ^ OpenError raiseRequestWith:filename errorString:' - file is a directory'.
+ ^ OpenError raiseRequestWith:filename errorString:(' - file is a directory: "%1"' bindWith:filename pathName).
].
stream notNil ifTrue: [
- self close.
+ self close.
].
archiveName := filename name.
@@ -3384,32 +3384,33 @@
self openFile.
mode ~~ #write ifTrue:[
- |mustCloseFile|
-
- mustCloseFile := true.
- [
- self readDirectory.
- mustCloseFile := false.
-
- mode == #append ifTrue:[
- members := self zipMembersByName values.
- members isEmptyOrNil ifTrue:[^ self].
-
- maxStartPosition := members maxApplying:[:eachMember | self dataStartOf:eachMember].
- lastMember := members detect:[:eachMember | eachMember dataStart = maxStartPosition].
-
- stream position:(startOfArchive + lastMember dataStart + lastMember compressedSize).
- mode := #write.
- ].
- ] ensure:[
- mustCloseFile ifTrue:[self close].
- ].
+ |mustCloseFile|
+
+ mustCloseFile := true.
+ [
+ self readDirectory.
+ mustCloseFile := false.
+
+ mode == #append ifTrue:[
+ members := self zipMembersByName values.
+ members isEmptyOrNil ifTrue:[^ self].
+
+ maxStartPosition := members maxApplying:[:eachMember | self dataStartOf:eachMember].
+ lastMember := members detect:[:eachMember | eachMember dataStart = maxStartPosition].
+
+ stream position:(startOfArchive + lastMember dataStart + lastMember compressedSize).
+ mode := #write.
+ ].
+ ] ensure:[
+ mustCloseFile ifTrue:[self close].
+ ].
] ifFalse:[
- zipMembersByName := Dictionary new.
+ zipMembersByName := Dictionary new.
].
"Modified: / 31-08-2010 / 12:39:25 / sr"
"Modified: / 17-02-2017 / 22:13:02 / stefan"
+ "Modified: / 21-05-2019 / 20:41:06 / Claus Gittinger"
!
readFrom:aPositionableStream
@@ -3425,25 +3426,26 @@
"initialize the archive to read from aPositionableStream"
stream notNil ifTrue: [
- stream ~~ aPositionableStream ifTrue: [
- self close.
- ].
+ stream ~~ aPositionableStream ifTrue: [
+ self close.
+ ].
].
mode := #read.
aPositionableStream binary.
stream := aPositionableStream.
aPositionableStream isFileStream ifTrue:[
- archiveName := aPositionableStream pathName.
- aPositionableStream isDirectory ifTrue:[
- OpenError raiseWith:self errorString:(' - is a directory').
- ].
+ archiveName := aPositionableStream pathName.
+ aPositionableStream isDirectory ifTrue:[
+ OpenError raiseWith:self errorString:(' - is a directory: "%1"' bindWith:archiveName).
+ ].
] ifFalse:[
- archiveName := 'internal stream'.
+ archiveName := 'internal stream'.
].
self readDirectory.
"Modified: / 21-11-2010 / 11:45:53 / cg"
+ "Modified: / 21-05-2019 / 20:45:28 / Claus Gittinger"
!
reopenForReading
@@ -4247,12 +4249,14 @@
|zipEntry dataStart|
(stream isNil or:[mode ~~ #read]) ifTrue:[
- ^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive not open for reading ...'.
+ ^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive not open for reading'.
].
zipEntry := self findMember:nameOfFileInArchive.
zipEntry isNil ifTrue:[
- ^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive member does not exist: '.
+ ^ OpenError
+ raiseRequestWith:nameOfFileInArchive
+ errorString:('ZipArchive member does not exist: "%1"' bindWith:nameOfFileInArchive).
].
dataStart := self dataStartOf:zipEntry.
@@ -4261,6 +4265,7 @@
^ (ZipReadStream zipFileStream:stream zipEntry:zipEntry) zipArchive:self.
"Modified (format): / 17-02-2017 / 22:52:00 / stefan"
+ "Modified: / 21-05-2019 / 20:46:07 / Claus Gittinger"
!
reopenAndExtract:fileName intoStream:aWriteStream