Differences between revisions 1 and 9 (spanning 8 versions)
Revision 1 as of 2008-11-01 18:42:20
Size: 1726
Editor: anonymous
Comment:
Revision 9 as of 2009-02-02 14:00:17
Size: 1558
Editor: SimonMarsden
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## When you use this page as a template for creating your project page:
## * please remove all lines starting with two hashes (##)
## * except the acl line, please keep that, but remove one hash, so it reads #acl ...
## * fix the acl line so it has the correct page instead of the sample Project/...Group

#acl Project/AdminGroup:admin,read,write,delete,revert Project/ReadWriteGroup:read,write Project/ReadGroup:read
Line 10: Line 4:
... in Dyalog APL ... here in Dyalog APL syntax

(For an example of zipping files in APLX see [[APLXExamplesJava|here]])
Line 16: Line 12:
 {{{tn←zip_file_name ⎕NCREATE 0}}}<<BR>>
 {{{(22↑80 75 5 6)⎕NAPPEND tn 83}}}<<BR>>
 {{{⎕NUNTIE tn}}}<<BR>>
{{{
tn←zip_file_name ⎕NCREATE 0
(22↑80 75 5 6)⎕NAPPEND tn 83
⎕NUNTIE tn
}}}
Line 21: Line 19:
 {{{'SHAPP'⎕WC'OLEClient' 'Shell.Application'}}}<<BR>>
{{{
'SHAPP'⎕WC'OLEClient' 'Shell.Application'
}}}
Line 25: Line 26:
 {{{ADD←SHAPP.NameSpace⊂add_folder_name}}}<<BR>>
 {{{FILES←ADD.Items}}}<<BR>>
 {{{ZIP←SHAPP.NameSpace⊂zip_file_name}}}<<BR>>
{{{
ADD←SHAPP.NameSpace⊂add_folder_name
FILES←ADD.Items
ZIP←SHAPP.NameSpace⊂zip_file_name
}}}
Line 31: Line 34:
 {{{ZIP.CopyHere FILES(4+16)}}}<<BR>> {{{
ZIP.CopyHere FILES(4+16)
}}}
Line 35: Line 40:
Note that {{{FILES}}} can be a !FolderItems object (as here), a !FolderItem object, or a string that represents a file name. Note that {{{FILES}}} can be a !FolderItems object (as here), a !FolderItem object (result from the Item method), or a string that represents a file name.

Please note also that this stuff works only on versions of Windows that actually have the zipping capability, i.e. it won't zip anything on e.g. Windows 2000 but instead overwrite any existing ZIP file.

ZIPping with Windows Shell

... here in Dyalog APL syntax

(For an example of zipping files in APLX see here)

Suddenly I came in need of zipping files. And what more obvious solution than to use the zip-facilities already present in Windows? In essence it can be accomplished in a 3 (+1 if you don't already have a zip file) step process as follows.

If need be first create an empty zip file, basically a file with these 22 byte values: 80 75 5 6 0 ... 0:

tn←zip_file_name ⎕NCREATE 0
(22↑80 75 5 6)⎕NAPPEND tn 83
⎕NUNTIE tn

Once the zip file is present, create an instance of the Shell COM...

'SHAPP'⎕WC'OLEClient' 'Shell.Application'

... get a handle to the files, here a folder and the zip archive, calling the NameSpace method...

ADD←SHAPP.NameSpace⊂add_folder_name
FILES←ADD.Items
ZIP←SHAPP.NameSpace⊂zip_file_name

... and finally have all files in that folder copied to the ZIP archive,

ZIP.CopyHere FILES(4+16)

where 4 means "don't display a progress dialog box", and 16 "respond with 'Yes to All' for any dialog box that is displayed".

Note that FILES can be a FolderItems object (as here), a FolderItem object (result from the Item method), or a string that represents a file name.

Please note also that this stuff works only on versions of Windows that actually have the zipping capability, i.e. it won't zip anything on e.g. Windows 2000 but instead overwrite any existing ZIP file.

ZippingWithWindowsShell (last edited 2017-02-16 19:22:55 by KaiJaeger)