tryhi 发表于 2022-2-20 21:16:01

[原创]任意超大文件以原大小打包至VLX并极速释放(速度与硬盘写入速度一致)

本帖最后由 tryhi 于 2022-2-20 21:27 编辑

打包任意文件常规做法是转成十六进制(文变大100%)或者base64(变大33%)文本插入到lsp里面,导致编译文件变大而且加载变慢,释放文件必须内部先转码速度更加慢得离谱,发现一个从未有人用过的打包方法,打包后加载速度完全不受影响,释放速度更是快到离谱,达到硬盘的写入极限速度(好硬盘1秒达到1GB)。
方法如下:
1、将要打包的任意文件改后缀为TXT
2、代码里面用vl-get-resource读取,用保留函数_write-nb-str释放
3、用低版本CAD(据说2018不行)的vlide编辑器用专家模式编译,选择改了后缀的文件进行编译

实测打包了一部100mb大小的小电影,打包后vlx文件为100mb,加载速度0.01秒,释放文件的速度0.05秒(好像固态硬盘单次写入都非常快)
传统转字符串方法打包100M的文件简直就不敢想象
以下是示例代码,abcd是改了后缀的mp4,改后的文件名为abcd.txt
(defun c:tt (/ f file)
      (setq file (vl-get-resource "abcd"))
      (setq f(open "c:\\abcd.mp4" "w"))
      (_write-nb-str file f)
      (close f)
      (princ"\n文件释放完成,在C盘根目录")
)



下面的附件是保留函数_write-nb-str,加载即可食用。




hhc 发表于 2023-2-22 14:13:04

【转载】AutoCAD与AutoLISP能在数种操作系统版本下运行.不同的操作系统在ASCII文本文件中使用不同的约定符以表示行结束.例如,UNIX用单个换行符(LF,即ASCII码10),而MS-DOS,PC-DOS使用两个字符(CR/LF,即ASCII码13和10)来完成同一任务.为了便于开发在上述诸操作系统中,能以可移植方式工作的AutoLISP程序,WRITE-CHAR将换行符(ASCII码10)转换成当前操作系统使用的行结束符(或字符串).因此,在PC-DOS/MS-DOS系统中:
      (write-char 10 f)   返回 10
   但是却将字符串CR/LF(ASCII码13及10)写入文件.WRITE-CHAR不能将NULL字符(ASCII码0)写入文件.

xyz002 发表于 2022-7-27 08:42:39

感谢分享                                                

KO你 发表于 2022-10-30 21:19:01

本帖最后由 KO你 于 2022-10-30 21:21 编辑

我想把一个VLX文件合并到别一个VLX文件里,但其中有个VLX文件是独立空间的,要怎样合并呢,请指教。

能帮忙把这个独立空间的VLX文件帮我转成不是独立空间的吗,能力有限,这个问题我一直找不到方法

guosheyang 发表于 2022-2-20 21:47:50

感谢大佬共享!

rocking2008 发表于 2022-2-20 22:10:33

这个用处是啥?

tryhi 发表于 2022-2-20 22:24:01

rocking2008 发表于 2022-2-20 22:10
这个用处是啥?

打包任意文件,可能不是每个人都有这个需求,也不是唯一方案,但肯定是性能最高的方案

yyzhan12 发表于 2022-2-20 23:18:01

感觉这个方法和VB释放资源文件的方式是一样的

cghdy 发表于 2022-2-21 09:23:33

海哥牛逼

lxl217114 发表于 2022-2-21 09:39:25

给海哥点赞

轮回 发表于 2022-2-21 10:06:16

可以同时打包多个文件到一个vlx不?

tryhi 发表于 2022-2-21 10:08:58

轮回 发表于 2022-2-21 10:06
可以同时打包多个文件到一个vlx不?

可以的,就跟打包txt一样

paulpipi 发表于 2022-2-21 11:18:29

太牛了,高人
页: [1] 2 3 4
查看完整版本: [原创]任意超大文件以原大小打包至VLX并极速释放(速度与硬盘写入速度一致)