Problème
Vous devez compresser un dossier entier dans un seul fichier ".zip".
Solution
Utilisez la prise en charge intégrée de JMP pour la compression de fichiers afin de créer un objet ZipArchive. Une fois que vous avez un objet ZipArchive, vous pouvez écrire des représentations blob des fichiers non compressés dans le fichier ".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 );
);
Discussion
J'ai utilisé des variantes de cette fonction dans plusieurs compléments. J'espère que cela vous permettra de commencer à compresser vos fichiers !
Voir également
Référence de la syntaxe JSL > Messages JSL > Autres objets > Archive Zip
Index des scripts > ZipArchive