文件绑定

文件绑定是将多个文件合并到一个文件中,最常见的是将多个文本文档合并成一个大的文
本文档,这可以利用 DOS 命令 COPY 来实现,也可以利用 COPY 命令来将多个不同类型的文件绑
定成一个文件。而更为灵活的方法是利用一个特定的文件绑定工具来绑定文件,其灵活性是可以按
照用户的意愿来确定文件的绑定及打开方式。当然,这个文件绑定器却需要用户来创建。
一、使用 copy 命令
1、合并文本文档
◆ 将需要绑定的文档放置到同一个目录中,例如将 s1.txt 和 s2.txt 文档放到 E:\中。
◆ 在 E:\ 目录下打开 cmd.exe 窗口并键入下列语句:

E:\> copy /b s1.txt+s2.txt s3.txt

回车!即可在 E:\目录中创建出 s3.txt 文档。
2、简单绑定
利用 COPY.EXE 命令还可以将不同类型的文件绑定成一个文件。例如,有一个图像文件 s1.gif
和一个压缩文件 S2.rar,其合并的方式同上,即:
copy /b s1.gif+s2.rar s3.gif
回车!即可创建出 s3.gif 文件。
这里需要说明的是,
输出文件
的扩展名应与第一个被合并文件
的扩展名相同,例如,第一个被合
并文件的扩展名为.GIF,
则合并后
文件的扩展名也应为.GIF。
这样当
用鼠标在合并后文件名上双击时,
将会直接打开第一个被合并的文
件 s1.gif,将显示出一幅图片。
但是,
若要打开第二个被合并
的文件 s2.rar 时,则不能按上述
方法来操作,
此时应按下列方法来
操作:
◆ 在文件管理器窗口中 的
s3.gif 文档图标上单击鼠标右键,
打开右键菜单并并用鼠标光标指
向 “打开方式“ 选项, 在随后打
1
开的子菜单(见上图)上选取 “WinRAR archiver ” 项目,即可打开 s2.rar 文件。
◆ 若 “WinRAR archiver” 项目没有出现在菜单上时(见下图)
,
可选择该菜单上的 “选择程序...” 选项,此时将打开一个 “打开方式” 对话窗口,可以在该窗口中选
择一个打开.RAR 文件的程序,即 WinRAR.exe 程序,就可以打开 s2.rar 文件了。
二、绑定工具
下面的绑定工具的说明是以绑定两个文件为例。由绑定工具绑定合成的文件将由四部分构成,
包括两个绑定的文件、一个文件分解程序和一个用于存放相关数据内存区域。示意图如下:
文 件 分 离 器
绑 定 文 件1
绑 定 文 件2
保留
文件 1 长度
文件 2 长度
数据区域包含三项内容:绑定文件 1 的文件大小数据、绑定文件 2 的文件大小数据和保留项,其中
保留项可以保存一个标记,作为一个控制开关(这里没有使用)

上述示意图绑定了两个文件,当然也可以绑定多个文件。从该图可以看出,为了使被绑定的文
件能分解开并还原其原貌,首先应该有一个文件分离器。
1、创建文件分离器 (ALfl.exe)
、创建文件分离器(ALfl.exe)
该分离器程序应完成下列操作:
◆ 分离并恢复被绑定的程序文件;
◆ 运行恢复的绑定文件。
// ALfl.CPP
#include <windows.h>
#include <stdio.h>
#include <sys/stat.h>
// 隐藏控制台窗口
#pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup")
int main()
{
FILE *fp0, *fp1, *fp2;
struct _stat st={0};
TCHAR my_name[MAX_PATH];
// #define MAX_PATH 260
BYTE* buf=NULL;
int n[3]={0,0,0};
char TPath[MAX_PATH]; // 临时文件夹
char TFile1[MAX_PATH]; // 存放分解的绑定文件 1 全路径
char TFile2[MAX_PATH]; // 存放分解的绑定文件 2 全路径
// 设置分解后文件临时存放路径
GetTempPath(MAX_PATH,TPath);
// 获得临时文件夹
strcpy(TFile1,TPath);
strcat(TFile1,"\\AL_TEMP1.exe");
// 获得文件 1 全路径
strcpy(TFile2,TPath);
strcat(TFile2,"\\AL_TEMP2.exe");
// 获得文件 2 全路径
// 获取合成文件数据
GetModuleFileName(0,my_name, sizeof(my_name)); // 获取绑定文件名
_stat(my_name, &st); // 成员 st.st_size 为绑定文件长度
buf = (BYTE *)malloc(st.st_size); // 创建内存区域
fp0 = fopen(my_name, "rb"); // 打开绑定文件
fread(buf, 1, st.st_size, fp0); // 读绑定文件到内存区域
// 数据区域信息,该区域中存放的是两个被绑定文件的长度
fseek(fp0, -12,SEEK_END); // 文件指针从文件尾向前移动 12 字节
fread(&n[0], 4, 3, fp0); // 每项 4 字节,共有 3 项
// memcpy(&n[0],buf+st.st_size-12,12); // 该两行语句作用等同上两行语句
// memcpy(n,buf+st.st_size-12,12);
// 分解文件 1
fp1 = fopen(TFile1, "wb");
fwrite(buf+(st.st_size-n[1]-n[2]-12), 1, n[1], fp1);
// 分解文件 2
fp2 = fopen(TFile2, "wb");
fwrite(buf+(st.st_size-n[2]-12), 1, n[2], fp2);
// 释放资源
fclose(fp0);
fclose(fp1);
fclose(fp2);
free(buf);
// 运行分解程序
ShellExecute(NULL, "open", TFile2, NULL, NULL, SW_SHOWNORMAL);
ShellExecute(NULL, "open", TFile1, NULL, NULL, SW_SHOWNORMAL);
return 0;
}
注意:
◆ 编译出来的绑定工具程序 ALcom.exe,必须与文件分离器程序 ALfl.dat 在同一文件夹内,

为在用 ALcom.exe 工具绑定文件时,要引用到 ALfl.dat 文件。
◆ 当然,文件分离器也可以直接包含在绑定工具中,但这样做的后果是需要将整个绑定工具都
写入到绑定文件中,从而增大绑定后文件的长度,而这部分合并文件的模块代码,对于绑定文件来
说就是多余的。
用法:
ALcom 参数 1
参数 2
参数 3
参数 1 文件 1.exe
参数 2 文件 2.exe
参数 3 目标文件即绑定文件.exe
(上述源代码在 VC 6.0 中编译通过)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值