基本组成思想
其实,其中的构成思想非常简单。建立一个新的二进制文件,先写入你的捆绑程序的数据和其文件长度,再写入你要捆绑的第一个文件的数据和其文 件长度,后再直接写入你要捆绑的第二个文件的数据和文件长度,最后就可直接写入你要捆绑的最后一个文件的数据(不需其文件长度)。最终文件被执行时, 也就是将上面的方法思想倒过来既可。下面实例仅告诉你如何实现二个文件的捆绑,至于多个文件的捆绑,读者只需略加改动既可,详情请细看下载后的实例代码。下面我来讲讲如何具体将其来实现。
捆绑多个文件为一个可执行程序
先得到自身捆绑程序的文件长度和第一个要捆绑文件的文件长度,枚举第一个要捆绑文件有无图标,有的话就用它做为最终生成文件的图标,否则用自身捆绑程序所 带默认图标做最终生成文件的图标。在新建二进制文件中写入自身捆绑程序的数据和其文件长度,再写入第一个要捆绑文件的数据及其文件长度,最后直接写入第二 个文件的数据既可。捆绑涵数代码实现如下:
//绑定多个文件为一个可执行文件
bool CBindFileDlg::Bind_Files()
{
FILE* myself; //自身文件
FILE* out; //最终合成文件
FILE* in; //待绑定文件
int bytesin;
int totalbytes = 0;
struct _stat ST;
unsigned int finder = 0x12345678;
unsigned int i, k;
int l=1; //状态显示
char buff[20]; //状态显示
his_name = strFirstFilePath; //第一个绑定的文件名
_stat(my_name, &ST);
modify_data.my_length = ST.st_size;
if (modify_data.my_length == 0)
{
MessageBox("绑定文件中,自身文件长度为零时出错!","错误");
return false;
}
buf = (BYTE *)malloc(modify_data.my_length);
if (buf == NULL)
{
MessageBox("绑定文件中,分配自身文件长度时出错!","错误");
return false;
}
myself = fopen(my_name, "rb"); //打开自身文件
if (myself == NULL)
{
free(buf);
MessageBox("绑定文件中,