| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 86 人关注过本帖
标题:压缩 程序编译后运行只需两个文件
只看楼主 加入收藏
丁春秋yxp
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:259
专家分:315
注 册:2017-10-31
结帖率:78.38%
收藏
 问题点数:20 回复次数:4 
压缩 程序编译后运行只需两个文件
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编辑过]

搜索更多相关主题的帖子: DATA 打包 文件 合并 运行 
昨天 12:52
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2280
专家分:4768
注 册:2012-2-29
收藏
得分:0 
昨天 14:00
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:446
专家分:695
注 册:2019-10-11
收藏
得分:0 
甚至将第一次运行时会自动产生的两个FOXUSER文件也打包在一起(这两个文件视情可打包到数据文件中)。
config.fpw 加一句
RESOURCE=OFF
昨天 16:22
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1018
专家分:1535
注 册:2021-10-13
收藏
得分:0 
这个方案倒是新奇
昨晚 22:33
丁春秋yxp
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:259
专家分:315
注 册:2017-10-31
收藏
得分:0 
回复 3楼 sych
是的,又学了一招
昨晚 23:13
快速回复:压缩 程序编译后运行只需两个文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017074 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved