node中处理rar文件

我们知道zip是一个开放的标准,使用起来没有版权问题,很多软件都可以支持zip文件的处理。而rar格式由RARLAB开发,使用RAR格式可能需要遵守RARLAB的许可协议,当然了rarlab也比较有意思,它的软件你不注册也可以一直使用,windows平台上会弹出广告,也还是有不少企业购买了winrar的许可。据说以后windows系统会内置对rar的支持,rarlab估计更不容易收到用户的钱了。闲话不多说,因为rar也很好用,至少在windows平台上用户还挺多,开发软件还是需要考虑对rar的支持,提升下用户体验。
npm的资源里,支持rar的比较少,基本上支持的也是要靠调用系统安装的rar或者winrar,rar的命令也不复杂,干嘛还要去求诸外,自己手写一个用算了。
手边有一个对rar的需求,主要是处理目录的打包和解压。简单写了两个函数,封装了一下。

const cp = require('child_process');
const winRarPath = 'D:\\Program Files\\WinRAR\\Rar.exe';

function a(sourceFolder, destRARFile,logger) { return new Promise((resolve,reject)=>{
	cp.execFile(winRarPath, ['a','-ep1','-r','-idcdp','-inul',destRARFile,sourceFolder], (error, stdout, stderr) => {
		if (error) { if (logger!=undefined) logger.error(`exec error: ${error}`); reject(error); }
		if (stderr) { if (logger!=undefined) logger.error(`stderr: ${stderr}`); reject(stderr); }
		resolve();
		});
	});
}

function x(sourceFolder, destRARFile,logger) { return new Promise((resolve,reject)=>{
	cp.execFile(winRarPath, ['x','-idcdp','-inul',destRARFile,sourceFolder], (error, stdout, stderr) => {
		if (error) { if (logger!=undefined) logger.error(`exec error: ${error}`); reject(error); }
		if (stderr) { if (logger!=undefined) logger.error(`stderr: ${stderr}`); reject(stderr); }
		resolve();
		});
	});
}

module.exports = { a,x }

其中入参logger是log4js的logger,没有使用的话,传undefined即可,或者直接输出到控制台也可以的。
使用起来也很简单:

const rar=require("./winrar.js");
rar.a('e:\\test\\src', 'e:\\test\\rar\\backup.rar',undefined).then(()=>console.log("done")).catch(e=>console.log(e))
//rar.x('e:\\test\\dest', 'e:\\test\\rar\\backup.rar',undefined).then(()=>console.log("done")).catch(e=>console.log(e))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值