http://digilander.libero.it/Cenati Zippare con XP |
home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript |
|
|
|
|
|
Creare file zip usando solo le funzioni di Windows XP Windows XP può creare e leggere in modo nativo i file compressi nel formato "zip". Può anche mostrarli come se fossero una cartella, in modo da aprirli in modo trasparente per l'utente. Anche da uno script è possibile creare un file zip vuoto e riempirlo con i nostri file. Può servire, ad esempio, per comprimere periodicamente dei dati ed archiviarli oppure inviarli per posta elettronica. Un file zip vuoto è solo un file che inizia con i caratteri PK seguiti da due caratteri con codice ascii 5 e 6, e con 18 caratteri "nul" (ascii 0) per terminare. Creando un file con questi caratteri, Windows lo identifica come un file zip. Creato il file vuoto, posso copiarci dentro qualsiasi altro documento usando l'oggetto "NameSpace" che restituisce un accesso al pathname che viene specificato. Attenzione: namespace vuole un pathname completo e non solo il nome del file. Neppure se si vuole accedere ad un file posto nella stessa directory. Ecco perchè all'inizio del mio script recupero il nome completo della cartella corrente, mi serve per accedere correttamente al file zip. Puntando all'oggetto NameSpace(FileZip) posso applicare il metodo "CopyHere" per copiare un file all'interno dello zip. Oppure posso copiarci tutti gli elementi contenuti in una diversa cartella. Questo è quanto fa la funzione "AddFolder2Zip". Il codice riportato qui sotto fornisce tre funzioni per gestire i file zip. La funzione CreateEmptyZip crea un file zip vuoto. Il nome viene passato come parametro. La funzione AddFile2Zip aggiunge ad un archivio zip esistente (primo parametro) un file specifico (secondo parametro). Entrambi i file devono essere specificati con il nome completo, dal nome del drive all'estensione. La terza funzione, AddFolder2Zip, è simile alla precedente ma copia tutti i Folder.items. Cioè copia nell'archivio tutti i file contenuti nella cartella specificata come secondo parametro. La copia dei file impiega del tempo. Può durare pochi istanti o diversi secondi, dipende dalla dimensione e numerosità dei file da includere nello zip. Se lo script finisce, si distruggono gli oggetti che stanno porvvedendo alla creazione del file compresso e tutto si interrompe. Per ovviare a questo problema bisogna che lo script rimanga in vita per il tempo sufficiente a terminare la copia. Infatti il comando Copyhere, usato nello script, avvia la copia e passa al comando successivo senza attenderne il completamento. Una soluzione è mettere un comando di attesa (wscript.sleep 6000 attende sei secondi) che deve essere stimato secondo la dimensione dei file da comprimere. Oppure non occorre far nulla se lo script continua a fare altre cose e quindi non terminerà prima della fine della copia. Un metodo più intelligente invece consiste nell'attendere che il file compresso aumenti di dimensione. Infatti la creazione dello zip avviene in un file temporaneo e solo alla fine della compressione c'è il trasferimento nel file definitivo. Se verifico (ogni 300 millisecondi, nell'esempio) la dimensione del file compresso posso rilevare il momento in cui supero i 22 caratteri che corrispondono ad uno zip vuoto. La funzione "CreateEmptyZip" genera infatti un file da 22 caratteri. Quando la compressione è terminata, questo file cresce di dimensione e ciò testimonia la fine del processo. A questo punto posso essere sicuro che il lavoro è finito e posso chiudere lo script senza interrompere la compressione. Nell'esempio riportato, questo controllo è effettuato puntando al file zip e controllandone la proprietà SIZE. Questo controllo potrebbe anche essere spostato all'interno delle funzioni che si occupano di aggiungere un file o una cartella all'archivio compresso. Se invece è necessario comprimere diverse directory comprendendone la struttura oppure proteggendo con una password, bisogna passare ad un programma di compressione a linea di comando come 7zip, che ha numerose funzioni aggiuntive rispetto alla compressione base di Windows. Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script. '************************************************ E per estrarre files da un archivio zip? Analogamente a come si copiano dei files in una cartella compressa, si possono estrarre in una cartella normale. Anche in questo caso è necessario che ZipFile sia indicato come pathname completo
Giovanni Cenati
|
|
|
|
© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com
|
|