node.js实例:使用child_process模块调用WinRAR压缩文件示例【带有压缩注释】
nodejs 2023-07-14 18:53:21小码哥的IT人生shichen
node.js示例代码【测试可用】
rar.js文件源码:
var fs = require('fs');
var path = require('path');
var cp = require('child_process');
var rarName = 'h5.rar';//rar格式文件名
// var zhushi = path.join(__dirname,'jb51.net.txt');//注释文件
var zhushi = 'info.txt';//注释文件
var rarfile = 'F:/rarpath/' + rarName;//生成的rar文件路径【路径名+压缩文件名】
var sourcefile = 'F:/input/';//待压缩文件所在目录
//删除指定目录下所有文件
function deleteFilesInDirectory(directory) {
fs.readdirSync(directory).forEach((file) => {
const filePath = path.join(directory, file);
if (fs.statSync(filePath).isFile()) {
fs.unlinkSync(filePath); // 删除文件
} else {
deleteFilesInDirectory(filePath); // 递归删除子目录下的文件
fs.rmdirSync(filePath); // 删除空目录
}
});
}
//执行cmd命令压缩文件
// cp.exec('"D:\\Program Files\\WinRAR\\WinRAR.exe" a -r ' + rarfile + ' ' + sourcefile,{encoding:'binary'},function(e,stin,stout){
cp.exec('"D:\\Program Files\\WinRAR\\WinRAR.exe" a -z' + zhushi + ' -r ' + rarfile + ' ' + sourcefile,{encoding:'binary'},function(e,stin,stout){
// console.log('文件压缩成功!',e,stin,stout);
console.log('文件压缩成功!',e);
// deleteFilesInDirectory(sourcefile);//删除原有待压缩文件所在目录
});
说明:
WinRAR.exe压缩命令中的-z 参数说明了注释文件的位置,可以使用path.join拼接出一个txt注释文件的绝对路径,笔者此处将其放到了rar.js的同级目录下,以避免对最终运行环境的依赖而造成的bug(比如:最终部署的运行环境因为相对路径问题而找不到到注释文件)。
补充:
代码中cp.exec 运行winrar.exe可执行文件进行压缩操作,需要依赖本机的运行环境,因此对运行环境有一定的限制(比如winrar安装在C盘或者E盘的话,就需要修改可执行文件的路径),有鉴于此,笔者将D:/Program Files安装目录下的WinRAR文件夹整个复制到了 rar.js 文件的同级目录下,从本地直接调用WinRAR.exe可执行文件,从而摆脱对WinRAR安装环境的依赖,测试代码修改如下:
var fs = require('fs');
var path = require('path');
var cp = require('child_process');
var rarName = 'h5.rar';//rar格式文件名
// var zhushi = path.join(__dirname,'jb51.net.txt');//注释文件
var zhushi = 'info.txt';//注释文件
var rarfile = 'F:/rarpath/' + rarName;//生成的rar文件路径【路径名+压缩文件名】
var sourcefile = 'F:/input/';//待压缩文件所在目录
//删除指定目录下所有文件
function deleteFilesInDirectory(directory) {
fs.readdirSync(directory).forEach((file) => {
const filePath = path.join(directory, file);
if (fs.statSync(filePath).isFile()) {
fs.unlinkSync(filePath); // 删除文件
} else {
deleteFilesInDirectory(filePath); // 递归删除子目录下的文件
fs.rmdirSync(filePath); // 删除空目录
}
});
}
//执行cmd命令压缩文件
// cp.exec('"D:\\Program Files\\WinRAR\\WinRAR.exe" a -r ' + rarfile + ' ' + sourcefile,{encoding:'binary'},function(e,stin,stout){
const rarpath = path.join(__dirname,'/WinRAR/','WinRAR.exe');//使用当前目录下的winrar.exe
cp.exec('"'+rarpath+'" a -z' + zhushi + ' -r ' + rarfile + ' ' + sourcefile,{encoding:'binary'},function(e,stin,stout){
// console.log('文件压缩成功!',e,stin,stout);
console.log('文件压缩成功!',e);
// deleteFilesInDirectory(sourcefile);//删除原有待压缩文件所在目录
});
代码测试成功!即可以直接将WinRAR.exe可执行文件放到rar.js同级目录下调用,避免了对安装环境的依赖!