如何将配置信息写入.exe内(象ShareQQ)?(100分)

  • 主题发起人 主题发起人 gxsh
  • 开始时间 开始时间
G

gxsh

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将配置信息写入.exe内(象ShareQQ)?
 
自己已解决.
 
可否告知如何解决的,谢谢
sxingyue@yeah.net
 
能否帖出来!
 
俺也想学学。
 
大概思路:
写入信息:
1、另建一程序用于配置该exe文件(或着在程序中将exe复制一份进行配置)。
2、用 seek(FileName,filesize(FileName));将指针移到文件末尾。
3、用 BlockWrite(FileName,arrayStr,len) 将长度为 len 的字符数组 arrayStr 写入。
4、用 blockwrite(f,char(len),1) 写入刚才写入的配置信息的长度。
5、重复上述过程,写入全部配置信息。
读取信息:
1、exe 文件要在开始运行的代码段(如 FormCreate 中)将模式设为 FileMode :=0;
不然无法打开自己读取信息。
2、用 seek(FileName,filesize(FileName)-1),将指针移到文件倒数第三个字节(原
来写入长度的位置)。
3、用 BlockRead(FileName,each_size[1],1)将长度读入 each_size[1],用 len:=ord(each_size[1]) 得到最后一个配置信息的长度 len。
4、用 seek(FileName,filesize(f)-1-len) 将指针移到最后一个配置信息的开始处,
用 blockread(FileName,str,len) 将最后一个配置信息读入到 str 数组。
5、重复类似的动作直到将全部配置信息读出。
 
也可以顺序写入各个配置,然后将每个配置信息的长度依次写在文件末尾,读取时先读取各个信息的长度并
计算出总长度,将指针移到信息开始处读取全部信息,最后根据各个信息的长度进行分割,得到每个配置信息。
 
关键代码:

写入:

procedure setfile;
var
f:File;
str:array [1..255] of char;
Each_size:array [1..2] of char;
HostName,HostIP:String;
len,I :integer;
begin
HostName:='Host PC';
HostIP:='192.168.0.3';
AssignFile(f,'test.exe');
Reset(f,1);

seek(f,filesize(f)); //将指针移到文件尾
for i:=1 to 255 do str:=char(0);
for i:=1 to length(s) do str:=HostName;
BlockWrite(f,str,length(HostName)); //写入配置1
Each_size[1]:=char(length(HostName)); //配置1的长度

for i:=1 to 255 do str:=char(0);
For i:=1 to length(s) do str:=HostIP;
blockwrite(f,str,length(HostIP)); //写入配置2
Each_size[2]:=char(length(HostIP)); //配置2的长度

blockwrite(f,Each_size,2); //写入两个配置的长度,分别占一个字节,最大为 FF (255)

CloseFile(f);

end;

读取:(记着先置 FileMode :=0;)

procedure ReadSet;
var
f:file;
each_size:array [1..2] of char;
str:array [1..255] of char;
Setstr:string;
len,i:integer;
begin
assignfile(f,Application.ExeName);
Reset(f,1);

seek(f,filesize(f)-2); //将指针移到倒数第三个字节,后面两个字节记录了两个配置的长度
BlockRead(f,each_size,2); //读出两个长度
len:=0;
for i:=1 to 2 do len:=len+ord(each_size); //算出总长度 len

seek(f,filesize(f)-2-len); //将指针移到信息开始处
for i:=1 to 255 do str:=' ';
blockread(f,str,len); //读取所有信息,总长度为 len
setstr:=trim(str); //字符串 setstr 为所有信息

//分割字符串 setstr,得到配置信息 HostName,HostIP (全局变量)
HostName := copy(setstr,1,ord(each_size[1]));
HostIP := copy(setstr,1,ord(each_size[2]));

CloseFile(f);
end;
 
接受答案了。
 
后退
顶部