我需要用b程序对a程序配置,把任意一个图片文件和文本文件写到a程序里,a程序发布出去后,里面带b程序对他写如的图片文件跟文本文件。
下面是b程序的配置代码:
var
Target,str:TFilestream;
Size:Integer;
sr: TSearchRec;
Begin
FindFirst('d:\a.exe', faAnyFile, sr);
if (sr.Size div 1024) > 500 then
begin
showmessage('已经添加好了!');
exit;
end;
try
//写如图片
str:=TFileStream.Create('My.bmp',fmOpenRead or fmShareExclusive);
Target := TFilestream.create('d:\a.exe', fmOpenWrite or fmShareExclusive);
Target.Seek(0,soFromEnd);
//往辅程序的尾部添加资源
Target.CopyFrom(str,0);
Size:=str.Size + Sizeof(Size);
//计算资源大小,并写入辅程序尾部
Target.WriteBuffer(Size,Sizeof(Size));
Target.Free;
str.Free;
//写入文字
str:=TFileStream.Create('1.txt',fmOpenRead or fmShareExclusive);
Target := TFilestream.create('d:\a.exe', fmOpenWrite or fmShareExclusive);
Target.Seek(0,soFromEnd);
//往辅程序的尾部添加资源
Target.CopyFrom(str,0);
Size:=str.Size + Sizeof(Size);
//计算资源大小,并写入辅程序尾部
Target.WriteBuffer(Size,Sizeof(Size));
finally
Target.Free;
str.Free;
end;
上面的代码能成功的把图片文件跟文本文件写到a里。
再看a的读出配置文件的代码
var
Source:TFilestream;
str:TMemoryStream;
Size:Integer;
Begin
try
str:=TMemoryStream.Create;
Source := TFilestream.create(Application.ExeName, fmOpenRead or fmShareDenyNone);
Source.Seek(-Sizeof(Size),soFromEnd);
//读出资源大小
Source.ReadBuffer(Size,SizeOf(Size));
//定位到资源的开始位置
Source.Seek(-Size,soFromEnd);
//取出资源并存到文件中
str.CopyFrom(Source,Size - SizeOf(Size));
str.SaveToFile('1.txt');
//显示
Memo1.Lines.LoadFromFile('1.txt');
Finally
str.Free;
Source.Free;
end;
该段代码能成功的把 添加到尾端的文本文件读出,当是图片文件没办法读出来,有什么方法能把图片文件跟文本文件都分解出来哈,上面的代码原本是我辛苦找的,但只能添加一个文件,现在我需要加2个文件,但对流的造作不熟悉,不知道怎么改好,大虾救救俺呀,
下面是b程序的配置代码:
var
Target,str:TFilestream;
Size:Integer;
sr: TSearchRec;
Begin
FindFirst('d:\a.exe', faAnyFile, sr);
if (sr.Size div 1024) > 500 then
begin
showmessage('已经添加好了!');
exit;
end;
try
//写如图片
str:=TFileStream.Create('My.bmp',fmOpenRead or fmShareExclusive);
Target := TFilestream.create('d:\a.exe', fmOpenWrite or fmShareExclusive);
Target.Seek(0,soFromEnd);
//往辅程序的尾部添加资源
Target.CopyFrom(str,0);
Size:=str.Size + Sizeof(Size);
//计算资源大小,并写入辅程序尾部
Target.WriteBuffer(Size,Sizeof(Size));
Target.Free;
str.Free;
//写入文字
str:=TFileStream.Create('1.txt',fmOpenRead or fmShareExclusive);
Target := TFilestream.create('d:\a.exe', fmOpenWrite or fmShareExclusive);
Target.Seek(0,soFromEnd);
//往辅程序的尾部添加资源
Target.CopyFrom(str,0);
Size:=str.Size + Sizeof(Size);
//计算资源大小,并写入辅程序尾部
Target.WriteBuffer(Size,Sizeof(Size));
finally
Target.Free;
str.Free;
end;
上面的代码能成功的把图片文件跟文本文件写到a里。
再看a的读出配置文件的代码
var
Source:TFilestream;
str:TMemoryStream;
Size:Integer;
Begin
try
str:=TMemoryStream.Create;
Source := TFilestream.create(Application.ExeName, fmOpenRead or fmShareDenyNone);
Source.Seek(-Sizeof(Size),soFromEnd);
//读出资源大小
Source.ReadBuffer(Size,SizeOf(Size));
//定位到资源的开始位置
Source.Seek(-Size,soFromEnd);
//取出资源并存到文件中
str.CopyFrom(Source,Size - SizeOf(Size));
str.SaveToFile('1.txt');
//显示
Memo1.Lines.LoadFromFile('1.txt');
Finally
str.Free;
Source.Free;
end;
该段代码能成功的把 添加到尾端的文本文件读出,当是图片文件没办法读出来,有什么方法能把图片文件跟文本文件都分解出来哈,上面的代码原本是我辛苦找的,但只能添加一个文件,现在我需要加2个文件,但对流的造作不熟悉,不知道怎么改好,大虾救救俺呀,
解决方案 »
- 动态库和静态库
- 如何在对话框内用CreateWindow函数创建编辑框?
- ****向各位高手求救:如何在对话框A中,为对话框B中的控件List control添加内容****
- installInstallShield能否将adobe reader安装程序一起打包????
- 请问:有哪位高手做过JPEG2000图像压缩算法,能否给予源码或者相关资料和建议
- 〖高手请进.¥100.00〗
- 我现在已经把资源从资源DLL和EXE中读出来了,但怎么根据这些数据创建相应的可视化资源?
- 如何截取屏幕,把它保存并重新显示?
- 怎样枚举局域网内的所有工作组,以及工作组内的所有成员(在98、NT、2000下分别实现)?
- HTML中FLASH显示问题
- COM计用计数:如何理解AddRed()、Release()返回的计数值是不精确的,不可信的?
- 过年了,还有人在坚守岗位吗?问个问题,浏览器控件怎么用啊?
文件a的结构:
文件a数据 + 文件1大小 + 文件1数据 + 文件2大小 + 文件2数据 + … + “文件1大小”的偏移量读取的时候,先从末尾读到附加数据的偏移量,然后seek到“文件1大小”出,
读取文件1的大小,接着按这个尺寸读取文件1的数据,
然后接着读取文件2的大小,再按这个尺寸读取文件2的数据,
这样一直重复到文件末尾
Source:TFilestream;
str:TMemoryStream;
Size:Integer;
Begin
try
str:=TMemoryStream.Create;
Source := TFilestream.create(Application.ExeName, fmOpenRead or fmShareDenyNone);
Source.Seek(-Sizeof(Size),soFromEnd);
//读出资源大小
Source.ReadBuffer(Size,SizeOf(Size));
//定位到资源的开始位置
Source.Seek(-Size,soFromEnd);
//取出资源并存到文件中
str.CopyFrom(Source,Size - SizeOf(Size));
str.SaveToFile('1.txt');
//显示
Memo1.Lines.LoadFromFile('1.txt');//添加begin---------------------------
//清除str
str.Clear;
//定位到资源大小的位置
Source.Seek(-(Size+Sizeof(Size)),soFromEnd);
//读出资源大小
Source.ReadBuffer(Size,SizeOf(Size));
//定位到资源的开始位置
Source.Seek(-Size,soFromCurrent);
//取出资源并存到文件中
str.CopyFrom(Source,Size - SizeOf(Size));
str.SaveToFile('My.bmp');
//添加end---------------------------Finally
str.Free;
Source.Free;
end;
用现在最流行的一句话,你真是太有才了(呵呵,真是还厉害哇)
我在其他地方还有2个贴子,帮忙来领分。
http://community.csdn.net/Expert/topic/5426/5426569.xml?temp=.8106958
http://community.csdn.net/Expert/topic/5426/5426594.xml?temp=.7624781