?? unit_main.~pas
字號(hào):
//計(jì)算要接收的長(zhǎng)度_end;
//頭信息收完了
if cmd1 = #13#10 then break;
end;
real_reclen1 := 0;
while Form_Update.ClientSocket1.Active = true do
begin
if Form_Update.stop1 = true then break;
//不能接收則退出
if Form_Update.can_rec1 = false then break;
//如果文件當(dāng)前的長(zhǎng)度大于服務(wù)器標(biāo)識(shí)的長(zhǎng)度,則是出錯(cuò)了,不要寫入文件中
if filesize(f1) >= total_len1 then
begin
//showmessage('文件已經(jīng)下載完畢了!');
result := true;
Form_Update.Memo1.Lines.Add(file1 + '文件下載完成' + #13#10);
break;
end;
zeromemory(@buf1, sizeof(buf1));
rec1 := Form_Update.ClientSocket1.Socket.ReceiveBuf(buf1, sizeof(buf1));
//如果實(shí)際收到的長(zhǎng)度大于服務(wù)器標(biāo)識(shí)的長(zhǎng)度,則是出錯(cuò)了,不要寫入文件中
if real_reclen1 >= reclen1 then
begin
//showmessage('文件已經(jīng)下載完畢了!');
result := true;
Form_Update.Memo1.Lines.Add(Form_update.serfilename + '實(shí)際收到文件長(zhǎng)度大于服務(wù)器標(biāo)識(shí)長(zhǎng)度,跳過下載' + #13#10);
break;
end;
//如果當(dāng)前的長(zhǎng)度大于服務(wù)器標(biāo)識(shí)的長(zhǎng)度,則是出錯(cuò)了,不要寫入文件中
if pos1 = reclen1 then
begin
//showmessage('文件已經(jīng)下載完畢了!');
result := true;
Form_Update.Memo1.Lines.Add(Form_update.serfilename + '當(dāng)前長(zhǎng)度大于服務(wù)器標(biāo)識(shí)長(zhǎng)度,跳過下載' + #13#10);
break;
end;
blockwrite(f1, buf1, rec1);
real_reclen1 := real_reclen1 + rec1;
//顯示下載進(jìn)度
Form_Update.Label4.Caption := '共 ' + FormatFloat('#,##', reclen1) + ' 字節(jié),已下載 ' + FormatFloat('#,##', real_reclen1) + ' 字節(jié)';
Form_Update.Gauge_process.MaxValue := reclen1;
Form_Update.Gauge_process.Progress := real_reclen1;
Form_update.Notebook_step.Refresh;
application.ProcessMessages;
end;
closefile(f1);
//發(fā)送get請(qǐng)求,以得到實(shí)際的文件數(shù)據(jù)_end;
Form_Update.ClientSocket1.Active := false;
except
closefile(f1);
//showmessage('連接失敗...');
result := false;
Form_Update.Memo1.lines.add(Form_update.serfilename + '服務(wù)器連接失敗,取消下載' + #13#10);
end;
end;
procedure TForm_Update.btn_nextClick(Sender: TObject);
var i: integer;
run_exe, host1, file1: string;
Flist: TListItem;
//myblob: TStream;
fd: Tdatetime;
allget:boolean;
begin
if btn_next.Caption = '完成升級(jí)' then
begin
btn_next.Enabled := false;
btn_next.Caption := '復(fù)制新文件..';
button2.Enabled := false;
//復(fù)制文件更新
for i := 0 to files.Count - 1 do
begin
//備份一份文件出來到backup
copyfile(pchar(g_path + files[i]), pchar(g_path + 'backup\' + files[i] + '.bak'), false);
end;
//從update復(fù)制新文件
for i := 0 to files.Count - 1 do
begin
//替換復(fù)制文件
copyfile(pchar(g_path + 'update\' + files[i]), pchar(g_path + files[i]), false);
//刪除update目錄中的升級(jí)文件
DeleteFile(pchar(g_path + 'update\' + files[i]));
end;
try
AppIni := TIniFile.Create(g_path + 'gdzc.ini');
run_exe := AppIni.ReadString('gdzc', 'exe', '');
if run_exe <> '' then
shellexecute(handle, 'open', pchar(run_exe), nil, nil, SW_SHOWNORMAL);
finally
AppIni.Free;
end;
application.Terminate;
exit;
end;
Notebook_step.PageIndex := Notebook_step.PageIndex + 1;
Gauge_process.MaxValue := 100;
Gauge_process.Progress := 0;
ListView_files.Items.Clear;
Flist := ListView_files.Items.Add;
Flist.Caption := '分析文件升級(jí)信息...';
Flist.StateIndex := 0;
Flist.ImageIndex := 0;
if ExistNewFile then //如果存在升級(jí)信息
begin
ListView_files.Items.Clear;
Gauge_process.Progress := 0;
for i := 0 to files.Count - 1 do
begin
Flist := ListView_files.Items.Add; //把待升級(jí)文件信息寫入列表
Flist.Caption := files[i];
Flist.StateIndex := -1;
Flist.ImageIndex := -1;
end;
//下載升級(jí)文件
btn_next.Enabled := false;
btn_next.Caption := '正下載文件..';
button2.Enabled := true;
try
AppIni := TIniFile.Create(g_path + 'update\update.ini');
for i := 0 to files.Count - 1 do
begin
ListView_files.Items[i].StateIndex := 0;
ListView_files.Items[i].ImageIndex := 0;
listview_files.Items[i].SubItems.Add(appini.ReadString(files[i], 'datetime', ''));
host1 := Edt_url.Text + files[i];
file1 := g_path + 'update\' + files[i];
memo1.Lines.Add('連接遠(yuǎn)程文件:' + host1 + #13#10);
if getfiledate(g_path + files[i], fd) then
begin
if fd < strtodatetime(Appini.ReadString(files[i], 'datetime', '')) then
begin
listview_files.Items[i].SubItems.Append('需要升級(jí)');
if Download(host1, file1) then
begin
allget:=true;
ListView_files.Items[i].StateIndex := 1;
ListView_files.Items[i].ImageIndex := 1;
end
else
begin
allget:=false;
ListView_files.Items[i].StateIndex := 2;
ListView_files.Items[i].ImageIndex := 2;
end;
end
else
begin
allget:=true;
listview_files.Items[i].SubItems.Append('不需更新');
ListView_files.Items[i].StateIndex := 3;
ListView_files.Items[i].ImageIndex := 3;
memo1.Lines.Add(listview_files.Items[i].Caption+'文件不需要更新,跳過下載'+#13#10);
end;
end
else
begin
listview_files.Items[i].SubItems.Append('需要?jiǎng)?chuàng)建');
if Download(host1, file1) then
begin
allget:=true;
ListView_files.Items[i].StateIndex := 1;
ListView_files.Items[i].ImageIndex := 1;
end
else
begin
allget:=false;
ListView_files.Items[i].StateIndex := 2;
ListView_files.Items[i].ImageIndex := 2;
end;
end;
end;
finally
button2.Enabled := false;
AppIni.Free;
HTTPfiles.Disconnect;
end;
btn_next.Enabled := true;
sj:=sj or allget;
if (Notebook_step.PageIndex = Notebook_step.Pages.Count - 1) and sj then btn_next.Caption := '完成升級(jí)' else btn_next.Caption:='繼續(xù)下載';
end;
end;
procedure TForm_Update.Notebook_stepPageChanged(Sender: TObject);
begin
if Notebook_step.PageIndex = 0 then
begin
btn_pre.Enabled := false;
btn_next.Caption := '下一步';
btn_next.Enabled := true;
end
else btn_pre.Enabled := true;
end;
procedure TForm_Update.btn_preClick(Sender: TObject);
begin
button2.Click;
try
HTTPFiles.Disconnect;
except
end;
Notebook_step.PageIndex := Notebook_step.PageIndex - 1;
btn_next.Caption := '下一步';
btn_next.Enabled := true;
end;
procedure TForm_Update.ListBox_serversClick(Sender: TObject);
var i: integer;
begin
Edt_url.Text := '';
for i := 0 to ListBox_servers.Items.Count - 1 do
if ListBox_servers.Selected[i] then
begin
try
AppIni := TIniFile.Create(g_path + '\GT.ini');
Edt_url.Text := AppIni.ReadString('update', ListBox_servers.Items[i], 'http://');
finally
AppIni.Free;
end;
end;
end;
procedure TForm_Update.FormShow(Sender: TObject);
begin
btn_next.SetFocus;
end;
procedure TForm_Update.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
try
HTTPFiles.Disconnect;
except
end;
files.Free;
end;
function TForm_Update.ExistNewFile: Boolean;
var i {, iFileHandle}: integer;
{FileDateTime: TDateTime;}
filestr: TStringList;
begin
result := false;
filestr := TStringList.Create;
//下載文件
files.Clear;
try
if copy(Edt_url.Text, length(Edt_url.Text), 1) <> '/' then Edt_url.Text := Edt_url.Text + '/';
filestr.Add(HTTPFiles.Get(Edt_url.Text + sys_id + '.htm'));
filestr.SaveToFile(g_path + 'update\update.ini');
filestr.Free;
except
MessageBox(handle, '取得升級(jí)信息出錯(cuò)!', '錯(cuò)誤提示', MB_OK + MB_ICONERROR);
exit;
end;
files.Clear;
try
AppIni := TIniFile.Create(g_path + '\update\update.ini');
AppIni.ReadSections(files);
finally
AppIni.Free;
end;
result := true;
end;
procedure TForm_Update.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := true;
if HTTPFiles.Connected then
begin
if MessageBox(handle, '正在下載文件,要退出嗎?', '信息提示', MB_YESNO + MB_ICONQUESTION) = ID_YES then CanClose := true else CanClose := false;
end;
if btn_next.Caption = '完成升級(jí)' then
begin
if MessageBox(handle, '文件下載已經(jīng)完成,但并沒有更新文件,要退出嗎?', '信息提示', MB_YESNO + MB_ICONQUESTION) = ID_YES then CanClose := true else CanClose := false;
end;
end;
procedure TForm_Update.Button1Click(Sender: TObject);
begin
if self.Height = 280 then self.Height := 438 else self.Height := 280;
end;
procedure TForm_Update.Button2Click(Sender: TObject);
begin
sj:=false;
self.stop1 := true;
memo1.Lines.Add('已中斷下載;' + #13#10);
end;
procedure TForm_Update.FormActivate(Sender: TObject);
begin
self.Height := 280;
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -