明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1996|回复: 8

[源码] LISP实现文件解压功能(无需系统安装解压软件)

  [复制链接]
发表于 2022-2-4 22:50:04 | 显示全部楼层 |阅读模式
本帖最后由 yxp 于 2022-2-4 22:59 编辑

可以在你的 CAD 工具包里调用 LISP 解压缩。

运行以下程序需要系统注册  dynwrapx.dll,详见 DWX中文说明
另外,需要将 UnRAR64.dll 下载到你的 CAD 支持目录。

  1. ;;Lisp 调用解压缩库文件示例,明经通道,by yxp 2022-2-2
  2. (vl-load-com)
  3. (defun c:urar (/ RARopen fsleng fn sn)
  4.   (setq sfilePath (if sfilePath (strcat sfilePath "\\") ""))
  5.   (setq fss    (getfiled "请选择压缩文件" sfilePath "rar" 0)
  6.         DWX    (vlax-create-object "DynamicWrapperX")
  7.         Rardll (findfile "UnRAR64.dll"))
  8.   (defun DWX_reg (func args rets)
  9.     (vlax-invoke DWX 'Register Rardll func args rets)
  10.   )
  11.   (if (and fss DWX Rardll)
  12.     (progn
  13.       (DWX_reg "RAROpenArchive" "i=p" "r=p") ;;打开压缩包
  14.       (DWX_reg "RARReadHeader" "i=pp" "r=p") ;;读取压缩包文件头
  15.       (DWX_reg "RARProcessFile" "i=huss" "r=l") ;;文件解压缩
  16.       (DWX_reg "RARCloseArchive" "i=p" "r=l") ;;关闭压缩包
  17.       (setq RARopen   (vlax-invoke DWX 'MemAlloc 36 1)
  18.             sfilePath (vl-filename-directory fss)
  19.             fsleng    (+ (strlen fss) 1)
  20.             pRarfs    (vlax-invoke DWX 'MemAlloc fsleng 1)
  21.       )
  22.       (vlax-invoke DWX 'StrPut fss pRarfs "s")
  23.       (vlax-invoke DWX 'NumPut pRarfs RARopen "p")
  24.       (vlax-invoke DWX 'NumPut 1 RARopen 8 "u") ;;解压模式
  25.       (setq Handle (vlax-invoke DWX 'RAROpenArchive RARopen)
  26.             uhead  (vlax-invoke DWX 'MemAlloc 576 1))
  27.       (while (= 0 (vlax-invoke DWX 'RARReadHeader Handle uhead))
  28.         (setq fn (vlax-invoke DWX 'StrGet uhead 260 "s")
  29.               sn (vlax-invoke DWX 'NumGet uhead 528 "u"))
  30.         (princ (strcat "\n正在解压: " fn ", " (itoa sn) "字节"))
  31.         (vlax-invoke DWX 'RARProcessFile Handle 2 sfilePath "")
  32.       )
  33.       (vlax-invoke DWX 'RARCloseArchive Handle) ;;rar 文件关闭
  34.       (vlax-invoke DWX 'MemFree uhead)
  35.     )
  36.   )
  37.   (princ)
  38. )

评分

参与人数 4明经币 +4 金钱 +50 收起 理由
bssurvey + 1 很给力!
zark + 1 很给力!
edata + 1 + 50 很给力!
panliang9 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-2-5 20:51:17 来自手机 | 显示全部楼层
那就可以lisp读写pmp了,嘻嘻
 楼主| 发表于 2022-2-5 21:42:06 | 显示全部楼层
你有种再说一遍 发表于 2022-2-5 20:51
那就可以lisp读写pmp了,嘻嘻

有缺点,不能读取分卷压缩包,不能解压有密码的压缩包,因为 lisp 无法回调。
发表于 2022-2-5 21:59:51 | 显示全部楼层
可以可以,我试了下,可以解压
刚开始我以为要用命令NETLOAD加载dll  后来发现不用   见笑了

这个能压缩文件吗?
 楼主| 发表于 2022-2-6 19:38:56 | 显示全部楼层
taoyi0727 发表于 2022-2-5 21:59
可以可以,我试了下,可以解压
刚开始我以为要用命令NETLOAD加载dll  后来发现不用   见笑了

rar 官方并未提供压缩文件的 dll,可以调用 rar 命令行压缩。或者,这种 dll 很多,7z 压缩似乎有提供,去官方网站能找到,还可以下载到 c++\c# 压缩算法的源码
发表于 2022-2-9 22:37:46 | 显示全部楼层
按照这趋势,有一天在CAD+Lisp环境下玩王者荣耀我都不觉得奇怪
发表于 2022-2-22 18:34:42 | 显示全部楼层
zixuan203344 发表于 2022-2-9 22:37
按照这趋势,有一天在CAD+Lisp环境下玩王者荣耀我都不觉得奇怪

发表于 2022-3-25 21:29:20 | 显示全部楼层
厉害,谢谢,但是还要加载CAD,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-27 01:17 , Processed in 0.196240 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表