一个测试,看看大家对代码的热情还有多少^_^ (50分)

  • 主题发起人 主题发起人 娃娃
  • 开始时间 开始时间

娃娃

Unregistered / Unconfirmed
GUEST, unregistred user!
代码段如下:
PROCEDURE TAutoUpgradeForm.SpeedButton1Click(Sender: TObject);
VAR NewProgram: TMemoryStream;
NetAddress, FileName: STRING;
DownloadFile: Integer;
BEGIN
//开始下载新程序,并且替换旧程序文件
IdAntiFreeze1.OnlyWhenIdle := true; //防止下载过程中程序处于“死”状态
TRY
TRY
NewProgram := TMemoryStream.Create;
NetAddress := ReadIniFile('其它', 'NetAddress'); //获取网络升级地址,这是个自定义的过程,是读取INI文件的
FOR DownloadFile := 0 TO 20 DO BEGIN
FileName := ReadIniFile('下载列表', 'File' + IntToStr(DownloadFile)); //这里想必大家也能明白,就是在INI文件中定义一个文件列表,以便提高升级的自由度
IF FileName <> '' THEN BEGIN
UpgradeMemo.Lines.Add('正在下载文件“'+FileName+'”……');
IdHTTP1.Get(NetAddress + FileName, NewProgram);
NewProgram.SaveToFile(FileName);
UpgradeMemo.Lines.Add('下载文件“'+FileName+'”成功!');
END ELSE
Break;
END;

MessForm.MyShowMess('程序升级', '自动升级程序已经成功完成!', '提示', 1);
EXCEPT
MessForm.MyShowMess('程序升级', '获取网络上相关资料时失败!', '警告', 1);
END;
FINALLY
NewProgram.Free;
END;
END;


整个过程其实很简单,就是利用了IdHTTP1下载指定地址的文件,然后保存成本地文件,现在有一个问题就是,下载文件多于1个时,win2000没有问题,但是在win98下就会出现所有的文件都变成了第一个文件的内容。

比如要下载3个文件:
A.exe
B.ini
C.XXX

下载完本地保存的文件名没有错,不过B.ini文件的内容其实是A.exe的内容,C.XXX也是一样。希望大家帮手解决一下,谢谢了!
 
有意思,学习来了。
 
只能说明id类的控件是基于2000的,如果不是你可以跟踪一下idhttp的代码。看看有没有对
操作系统的说明?

 
看一下AutoUpgrade控件的源码不就爽啦
用也很爽啊:一句搞掂,支持中文
 
AutoUpgrade控件是免费的吗?

那里可以获取?

应该不是只支持2000的吧,我在98下也可以下载文件,但就是下载多个文件的时候有点问题罢了。
 
IdHTTP1下载文件的时候,不知道有没有把NewProgram置0,所以在2000下可能是好的,而在98下就可能是不对的。而且,本身你的代码就不严谨,每次下载文件的时候,没有考虑大NewProgram的复位问题。
有两种解决办法:1。动态申请NewProgram变量,存完盘后就释放,再下在文件的时候就再申请再释放。
2。每次存完盘后就复位NewProgram,如下:
NewProgram.clear;
NewProgram.Position:=0;
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部