//a.exe 文件unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}const
bmp_width=64;procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
size:integer;
fs:TFileStream;
ms,ms1:TMemoryStream;
added:boolean;
sl:TStringlist;
image:TImage;
bmp:TBitmap;
begin
added:=false; fs:=TFileStream.Create(application.ExeName,fmOpenRead or fmShareDenyNone);
fs.Seek(-sizeof(boolean),soFromEnd);
fs.ReadBuffer(added,sizeof(added)); //读出文件是否被加入图片 if added then //如果加入了
begin
//showMessage('Pictures added!');
fs.Seek(-sizeof(boolean)-sizeof(integer),soFromEnd);
fs.ReadBuffer(size,sizeof(size));
//showMessage('stringListSize:'+intToStr(size));
fs.Seek(-sizeof(boolean)-sizeof(integer)-size,soFromEnd);
ms:=TmemoryStream.Create;
ms.CopyFrom(fs,size);
ms.SaveToFile('c:\zjs.txt');
sl:=TStringList.Create;
sl.LoadFromFile('c:\zjs.txt'); bmp:=TBitmap.Create;
bmp.Width:=bmp_width;
bmp.Height:=bmp_width;
i:=0; j:=0;
//showMessage('StingListCount:'+intToStr(sl.Count));
ms1:=TMemoryStream.Create; while i<sl.Count-1 do
begin
//showMessage('the '+ intTosTr(j)+' files!');
ms1.Clear;
ms1.Position:=0;
fs.Seek(strToInt(sl.Strings[i]),soFromBeginning);
ms1.CopyFrom(fs,StrToInt(sl.Strings[i+1]));
ms1.Position:=0;
bmp.LoadFromStream(ms1); image:=TImage.Create(self);
image.Parent:=self;
image.Width:=bmp_width;
image.Height:=bmp_width;
image.Left:=j*bmp_width+10*j;
form1.Width:=image.Left+image.Width+10;
image.Canvas.Draw(0,0,bmp); inc(i,2);
inc(j,1); end; bmp.Free; ms1.Free;
ms.Free;
fs.Free;
sl.Free;
end;end;end.//b.exe文件
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
sl_pos_size:TStringList;
targetFile:String;
fs:TFileStream;
ms,ms_target:TMemoryStream;
i:integer;
size:integer;
added:boolean;
begin
if not fileExists('a.exe') then
begin
showMessage('File not exists: a.exe!');
exit;
end;
if opendialog1.Execute then
begin
if saveDialog1.Execute then
begin
targetFile:=saveDialog1.FileName;
ms_target:=TMemoryStream.Create;
fs:=TFileStream.Create(extractFilePath(application.ExeName)+'a.exe',fmopenread or fmShareDenyWrite);
fs.Position:=0;
ms_target.CopyFrom(fs,0);
fs.Free; sl_pos_size:=TSTringlist.Create;
for i:=0 to opendialog1.Files.Count-1 do //逐个加入文件
begin
ms_target.Seek(0,soFromEnd);
sl_pos_size.Add(intToStr(ms_target.Position)); //加入文件的位置
fs:=TFileStream.Create(opendialog1.Files.Strings[i],fmOpenRead or fmShareDenynone);
sl_pos_size.Add(intToStr(fs.Size)); //加入文件的大小
ms_target.CopyFrom(fs,0);
fs.Free;
end;
ms:=TmemoryStream.Create;
sl_pos_size.SaveToStream(ms);
ms.Position:=0;
ms_target.Seek(0,soFromEnd);
ms_target.CopyFrom(ms,0); {size:=0;
for i:=0 to sl_pos_size.Count-1 do
begin
size:=size+length(sl_pos_size.Strings[i]);
end;} size:=ms.Size;
showMessage(intToStr(size)); ms_target.Seek(0,soFromEnd);
ms_target.WriteBuffer(size,sizeof(size)); added:=true;
ms_target.Seek(0,soFromEnd);
ms_target.WriteBuffer(added,sizeof(boolean));
ms_target.SaveToFile(targetFile);
ms_target.Free;
ms.Free; showMessage('OK');
end;
end;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}const
bmp_width=64;procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
size:integer;
fs:TFileStream;
ms,ms1:TMemoryStream;
added:boolean;
sl:TStringlist;
image:TImage;
bmp:TBitmap;
begin
added:=false; fs:=TFileStream.Create(application.ExeName,fmOpenRead or fmShareDenyNone);
fs.Seek(-sizeof(boolean),soFromEnd);
fs.ReadBuffer(added,sizeof(added)); //读出文件是否被加入图片 if added then //如果加入了
begin
//showMessage('Pictures added!');
fs.Seek(-sizeof(boolean)-sizeof(integer),soFromEnd);
fs.ReadBuffer(size,sizeof(size));
//showMessage('stringListSize:'+intToStr(size));
fs.Seek(-sizeof(boolean)-sizeof(integer)-size,soFromEnd);
ms:=TmemoryStream.Create;
ms.CopyFrom(fs,size);
ms.SaveToFile('c:\zjs.txt');
sl:=TStringList.Create;
sl.LoadFromFile('c:\zjs.txt'); bmp:=TBitmap.Create;
bmp.Width:=bmp_width;
bmp.Height:=bmp_width;
i:=0; j:=0;
//showMessage('StingListCount:'+intToStr(sl.Count));
ms1:=TMemoryStream.Create; while i<sl.Count-1 do
begin
//showMessage('the '+ intTosTr(j)+' files!');
ms1.Clear;
ms1.Position:=0;
fs.Seek(strToInt(sl.Strings[i]),soFromBeginning);
ms1.CopyFrom(fs,StrToInt(sl.Strings[i+1]));
ms1.Position:=0;
bmp.LoadFromStream(ms1); image:=TImage.Create(self);
image.Parent:=self;
image.Width:=bmp_width;
image.Height:=bmp_width;
image.Left:=j*bmp_width+10*j;
form1.Width:=image.Left+image.Width+10;
image.Canvas.Draw(0,0,bmp); inc(i,2);
inc(j,1); end; bmp.Free; ms1.Free;
ms.Free;
fs.Free;
sl.Free;
end;end;end.//b.exe文件
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
sl_pos_size:TStringList;
targetFile:String;
fs:TFileStream;
ms,ms_target:TMemoryStream;
i:integer;
size:integer;
added:boolean;
begin
if not fileExists('a.exe') then
begin
showMessage('File not exists: a.exe!');
exit;
end;
if opendialog1.Execute then
begin
if saveDialog1.Execute then
begin
targetFile:=saveDialog1.FileName;
ms_target:=TMemoryStream.Create;
fs:=TFileStream.Create(extractFilePath(application.ExeName)+'a.exe',fmopenread or fmShareDenyWrite);
fs.Position:=0;
ms_target.CopyFrom(fs,0);
fs.Free; sl_pos_size:=TSTringlist.Create;
for i:=0 to opendialog1.Files.Count-1 do //逐个加入文件
begin
ms_target.Seek(0,soFromEnd);
sl_pos_size.Add(intToStr(ms_target.Position)); //加入文件的位置
fs:=TFileStream.Create(opendialog1.Files.Strings[i],fmOpenRead or fmShareDenynone);
sl_pos_size.Add(intToStr(fs.Size)); //加入文件的大小
ms_target.CopyFrom(fs,0);
fs.Free;
end;
ms:=TmemoryStream.Create;
sl_pos_size.SaveToStream(ms);
ms.Position:=0;
ms_target.Seek(0,soFromEnd);
ms_target.CopyFrom(ms,0); {size:=0;
for i:=0 to sl_pos_size.Count-1 do
begin
size:=size+length(sl_pos_size.Strings[i]);
end;} size:=ms.Size;
showMessage(intToStr(size)); ms_target.Seek(0,soFromEnd);
ms_target.WriteBuffer(size,sizeof(size)); added:=true;
ms_target.Seek(0,soFromEnd);
ms_target.WriteBuffer(added,sizeof(boolean));
ms_target.SaveToFile(targetFile);
ms_target.Free;
ms.Free; showMessage('OK');
end;
end;
end;end.
”{“、”}“,就基本上没什么问题了。
Integer => int
Boolean => bool
ms_target.Seek(0,soFromEnd);
ms_target.WriteBuffer(size,sizeof(size)); added:=true;
ms_target.Seek(0,soFromEnd);
ms_target.WriteBuffer(added,sizeof(boolean));
ms_target.SaveToFile(targetFile);
ms_target->Seek(0,soFromEnd);
ms_target->WriteBuffer((void *)size,sizeof(size)); added=true;
ms_target->Seek(0,soFromEnd);
ms_target->WriteBuffer((void *)added,sizeof(added));
ms_target->SaveToFile(targetFile);
ms_target->Seek(0,soFromEnd);
ms_target->WriteBuffer(&size,sizeof(size)); added=true;
ms_target->Seek(0,soFromEnd);
ms_target->WriteBuffer(&added,sizeof(added));
ms_target->SaveToFile(targetFile);