Problema
Debe comprimir una carpeta completa en un solo archivo ".zip".
Solución
Use el soporte integrado de JMP para comprimir archivos y crear un objeto ZipArchive. Una vez que tenga un objeto ZipArchive, puede escribir representaciones de blob de los archivos no comprimidos en el archivo ".zip".
/*
Arguments:
folderToZip - "path" - path to the folder you want to compress
zipFileLoc - "path" - path to the output zip file
overwriteFile - <0|1> - do you want to overwrite an existing file. default is 0
recursive - <0|1> - do you want all files in the folder or just top leve. default is 1
*/
zipFolder = Function( {folderToZip, zipFileLoc, overwriteFile = 0, recursive = 1},
{Default Local},
// Convert the filepath to the OS and add a trailing slash if one is missing
If( Host is( "Windows" ),
folderToZip = Convert File Path( folderToZip, "Windows" );
zipFileLoc = Convert File Path( zipFileLoc, "Windows" );
If( Substr( folderToZip, -1 ) != "\",
folderToZip = Concat( folderToZip, "\" )
);
,
folderToZip = Convert File Path( folderToZip, "posix" );
zipFileLoc = Convert File Path( zipFileLoc, "posix" );
If( Substr( folderToZip, -1 ) != "/",
folderToZip = Concat( folderToZip, "/" )
);
);
// Check to see if the file exst
If( File Exists( zipFileLoc ),
Match( overwriteFile,
0, // if we should not overwrite, write to the log and return 0
Write( "\!NFile already exists" );
Return( 0 );
,
1, // else just delete the existing file
Delete File( zipFileLoc ),
);
);
// create the zipfile and ZipArchive object (za)
za = Open( zipFileLoc, zip );
// get our list of files to compress, based on recursive setting
If( recursive == 1,
dirlist = Files In Directory( folderToZip, "recursive" ),
dirlist = Files In Directory( folderToZip )
);
// loop through each file
For( iFile = 1, iFile <= N Items( dirlist ), iFile++,
// read in the uncompressed file as a blob
tmpBlob = Load Text File( folderToZip || dirlist[iFile], blob );
// write compressed file to the ZipArchive object
za << Write( dirlist[iFile], tmpBlob );
);
Return( 1 );
);
Discusión
He usado variaciones de esta función en varios complementos. ¡Espero que esto te ayude a comenzar a comprimir tus archivos!
Ver también
Referencia de sintaxis JSL> Mensajes JSL> Otros objetos> Archivo Zip
Índice de Scripting> ZipArchive