[原创]任意超大文件以原大小打包至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,加载即可食用。
【转载】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)写入文件. 感谢分享 本帖最后由 KO你 于 2022-10-30 21:21 编辑
我想把一个VLX文件合并到别一个VLX文件里,但其中有个VLX文件是独立空间的,要怎样合并呢,请指教。
能帮忙把这个独立空间的VLX文件帮我转成不是独立空间的吗,能力有限,这个问题我一直找不到方法
感谢大佬共享! 这个用处是啥? rocking2008 发表于 2022-2-20 22:10
这个用处是啥?
打包任意文件,可能不是每个人都有这个需求,也不是唯一方案,但肯定是性能最高的方案 感觉这个方法和VB释放资源文件的方式是一样的 海哥牛逼 给海哥点赞 可以同时打包多个文件到一个vlx不? 轮回 发表于 2022-2-21 10:06
可以同时打包多个文件到一个vlx不?
可以的,就跟打包txt一样 太牛了,高人