小码哥的IT人生

首页 > JS > nodejs

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同级目录下调用,避免了对安装环境的依赖!

版权所有 © 小码哥的IT人生
Copyright © phpcodeweb All Rights Reserved
ICP备案号:苏ICP备17019232号-2  

苏公网安备 32030202000762号

© 2021-2024