楼主的代码 在Button4Click 那里应该多加一个判断会好一些,检测用户是不是选择了保存路径,如果没有选择就跳提示信息。选择后才可执行下一步。下面是我修改了一下的结果;
if edit3.Text <> '' then
begin
// 初始化SelfFileInfo,FirstFileInfo,SecondFileInfo结构
FillChar(SelfFileInfo, sizeof(TFilesInfo), #0);
FillChar(FirstFileInfo, sizeof(TFilesInfo), #0);
FillChar(SecondFileInfo, sizeof(TFilesInfo), #0);
// 打开自身并读取
MySelf := TFileStream.Create(Application.ExeName, fmOpenRead or fmShareDenyNone);
// 获取自身文件大小
SelfFileInfo.FileSize := MySelf.Size;
SelfFileInfo.FileName := 'Bind'; // 打上标志
OutFile := TFileStream.Create(Edit3.Text, fmCreate or fmOpenWrite);
// 将自身文件保存在输出文件的最前面
OutFile.CopyFrom(MySelf, 0); // 第二个参数为0时表示复制整个内容
// 关闭打开的自身文件
MySelf.Free;
// 打开第一个要捆绑的文件
SourceFile := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyNone);
// 获取第一个要捆绑文件的文件名及大小
StrPCopy(FirstFileInfo.FileName, ExtractFileName(Edit1.Text));
FirstFileInfo.FileSize := SourceFile.Size;
// 将第一个文件的内容追加在输出文件后
OutFile.CopyFrom(SourceFile, 0);
// 关闭第一个文件
SourceFile.Free;
// 打开第二个要捆绑的文件
SourceFile := TFileStream.Create(Edit2.Text, fmOpenRead or fmShareDenyNone);
// 获取第二个要捆绑文件的文件名及大小
StrPCopy(SecondFileInfo.FileName, ExtractFileName(Edit2.Text));
SecondFileInfo.FileSize := SourceFile.Size;
// 将第二个文件的内容追加在输出文件后
OutFile.CopyFrom(SourceFile, 0);
// 关闭第二个文件
SourceFile.Free;
// 将被捆绑文件信息写在输出文件未尾
OutFile.Write(SelfFileInfo, sizeof(TFilesInfo));
OutFile.Write(FirstFileInfo, sizeof(TFilesInfo));
OutFile.Write(SecondFileInfo, sizeof(TFilesInfo));
// 关闭输出文件完成捆绑
OutFile.Free;
MessageBox(Handle,'捆绑完毕!','Nighter',MB_OK)
end
else
Application.MessageBox('请选择要保存的路径','提示',MB_OK);