压缩 程序编译后运行只需两个文件
VFP搞的小程序,编译成exe后,一大堆运行库,一大堆表文件、报表文件、变量存储文件跟在后边,看着就烦。想了几天,借力deepseek的帮助,最终将其压缩成两个文件,一个是可执行文件、一个是数据文件。将这两个文件放在一个文件夹下运行,就是个绿色软件。在数据量不是太大的情况下(总的不要超过一百兆),这方法利于维护,十分给力。原有程序改造时也只需改下主程序即可。
一、可执行文件。编译后的EXE文件和运行库使用虚拟文件打包工具(Enigma Virtual Box)打包,甚至将第一次运行时会自动产生的两个FOXUSER文件也打包在一起(这两个文件视情可打包到数据文件中)。
二、数据文件。不能编译到EXE中的、运行时要修改的文件,在主程序中加上以下代码打包成一个文件。程序运行时分离,退出时合并。这样磁盘上始终就两个文件。
例子:打包7个文件(6个表文件和1个变量存储文件)成一个数据文件“ty.data”。
*------ 调用
DO fileprocess WITH "SEPARATE" && 程序开始 从文件“ty.data”分离文件
DO fileprocess WITH "MERGE" && 程序结束 合并文件到“ty.data”,同时删除原文件
*------ 合并或分离运行时需要更改的数据文件
PROCEDURE fileprocess
LPARAMETERS lcaction && "SEPARATE" 分离文件 / "MERGE" 合并文件
IF lcaction = "SEPARATE" && 分离文件
RESTORE FROM ty.DATA ADDITIVE
FOR i = 1 TO ALEN(lafiles, 1)
IF !FILE(lafiles[i, 1])
STRTOFILE(lafiles[i, 2], lafiles[i, 1])
ENDIF
ENDFOR
RELEASE lafiles
ELSE && 合并文件(合并后删除原文件)
LOCAL ARRAY lafiles[7, 2]
lafiles[1, 1] = "ty_fz.dbf" && 初始化文件名
lafiles[2, 1] = "ty_fz_bf.DBF"
lafiles[3, 1] = "ty_fuxx.DBF"
lafiles[4, 1] = "ty_zhdj.dbf"
lafiles[5, 1] = "ty_glry.dbf"
lafiles[6, 1] = "ty_cb.DBF"
lafiles[7, 1] = "ty_sz.mem"
FOR i = 1 TO 7 && 初始化内容为空
lafiles[i, 2] = ""
ENDFOR
IF FILE("ty.data") && 如果ty.data存在,恢复内容
RESTORE FROM ty.DATA ADDITIVE
ENDIF
FOR i = 1 TO 7 && 更新存在的文件内容,跳过不存在的文件
IF FILE(lafiles[i, 1])
lafiles[i, 2] = FILETOSTR(lafiles[i, 1])
DELETE FILE (lafiles[i, 1]) && 删除文件
ENDIF
ENDFOR
SAVE TO ty.DATA ALL LIKE lafiles
ENDIF
ENDPROC
[此贴子已经被作者于2025-10-18 13:09编辑过]