程序大概如下...不知為如在执行時老是download兩個(線程為二)0kb的檔...
有沒有人可以救救小妹丫...急....><"
function tform1.GetFileSize(aURL: string): longint;
var
FileSize : integer;
begin
FileSize := IdFTP1.size(aurl);
IdFTP1.Abort;
Result := FileSize;
end;procedure TForm1.DirectoryListBoxDblClick(Sender: TObject);
var
m:integer;Name: String;
begin
if not IdFTP1.Connected then exit;
Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType = ditDirectory then begin
SetFunctionButtons(false);
ChageDir(Name);
SetFunctionButtons(true);
end
else begin
SaveDialog1.FileName := Name;
if SaveDialog1.Execute then begin
aFile := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
aURL:=aFile;
xx:=2;
aFileSize := GetFileSize(aURL);
avg := trunc(aFileSize/xx);
end;
end;
try
GetThread();
while m<=xx do
begin
MyThread[m].Resume;
m :=m+1;
end;
except
Exit;
end;
end;procedure TForm1.GetThread();
var
i: integer;
start: array[1..100] of integer;
last: array[1..100] of integer;
fileName: string;
begin
i := 1;
while i <= xx do
begin
start[i] := avg * (i - 1);
last[i] := avg * i -1;
if i = xx then
begin
last[i] := avg*i + aFileSize-avg*xx;
end;
fileName := aFile + IntToStr(i);
MyThread[i] := TThread1.create(aURL, aFile, fileName, false, i, start[i],
last[i]);
i := i + 1;
end;
end;constructor TThread1.create(aURL, aFile, fileName: string; bResume: Boolean;
Count, start, last: integer);
begin
inherited create(true);
FreeOnTerminate := true;
tURL := aURL;
tFile := aFile;
fCount := Count;
tResume := bResume;
tstart := start;
tlast := last;
temFileName := fileName;
end;
procedure TThread1.DownLodeFile();
varTIdFTP1 : TIdFTP;
tStream: TFileStream;
begin
tStream := TFileStream.Create(temFileName, fmCreate);
TIdFTP1.Get(tURL,tStream);
Form1.DebugListBox.ItemIndex := Form1.DebugListBox.Items.Add(temFileName+'download');
finally
tStream.Free;
end;
end;
procedure TThread1.Execute;
beginsynchronize(DownLodeFile)end;
有沒有人可以救救小妹丫...急....><"
function tform1.GetFileSize(aURL: string): longint;
var
FileSize : integer;
begin
FileSize := IdFTP1.size(aurl);
IdFTP1.Abort;
Result := FileSize;
end;procedure TForm1.DirectoryListBoxDblClick(Sender: TObject);
var
m:integer;Name: String;
begin
if not IdFTP1.Connected then exit;
Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType = ditDirectory then begin
SetFunctionButtons(false);
ChageDir(Name);
SetFunctionButtons(true);
end
else begin
SaveDialog1.FileName := Name;
if SaveDialog1.Execute then begin
aFile := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
aURL:=aFile;
xx:=2;
aFileSize := GetFileSize(aURL);
avg := trunc(aFileSize/xx);
end;
end;
try
GetThread();
while m<=xx do
begin
MyThread[m].Resume;
m :=m+1;
end;
except
Exit;
end;
end;procedure TForm1.GetThread();
var
i: integer;
start: array[1..100] of integer;
last: array[1..100] of integer;
fileName: string;
begin
i := 1;
while i <= xx do
begin
start[i] := avg * (i - 1);
last[i] := avg * i -1;
if i = xx then
begin
last[i] := avg*i + aFileSize-avg*xx;
end;
fileName := aFile + IntToStr(i);
MyThread[i] := TThread1.create(aURL, aFile, fileName, false, i, start[i],
last[i]);
i := i + 1;
end;
end;constructor TThread1.create(aURL, aFile, fileName: string; bResume: Boolean;
Count, start, last: integer);
begin
inherited create(true);
FreeOnTerminate := true;
tURL := aURL;
tFile := aFile;
fCount := Count;
tResume := bResume;
tstart := start;
tlast := last;
temFileName := fileName;
end;
procedure TThread1.DownLodeFile();
varTIdFTP1 : TIdFTP;
tStream: TFileStream;
begin
tStream := TFileStream.Create(temFileName, fmCreate);
TIdFTP1.Get(tURL,tStream);
Form1.DebugListBox.ItemIndex := Form1.DebugListBox.Items.Add(temFileName+'download');
finally
tStream.Free;
end;
end;
procedure TThread1.Execute;
beginsynchronize(DownLodeFile)end;
解决方案 »
- 有关操作ClientDataSet的问题,请大家帮忙;
- 如何设定一个字串变量的中文编码
- 怎样用Delphi写OPC客户端??急在线等
- [HELP]我发觉我暗恋一个MM了!可我不知她是否已经结婚或有男友!
- unix 客户端同windows server通信为什么server readln是空的,帮忙呀!
- 取出一个时间的年份和月份的函数是什么呀,马上给分1
- 关于 TMS Scripter 语法的问题
- ◎◎◎◎请教个结婚过程问题!!!◎◎◎◎
- 以下问题有没有人回答?
- 关于中断程序的问题
- delphi 开发的websevice java用wsdl2java说delphi的wsdl无效,怎么回事?
- 帮忙看下这个INSERT into 语句有什么问题?
procedure TDownThread.Execute;
begin
FreeOnTerminate := True; IsDown := False; ftpClient := TIdFTP.Create(nil); try
ftpClient.RecvBufferSize := 2048;
ftpClient.SendBufferSize := 2048; ftpClient.Host := FServerIp;
ftpClient.Port := FPort;
ftpClient.Username := fUserName;
ftpClient.Password := fPwd; ftpClient.OnWorkBegin := FtpWorkBegin;
ftpClient.OnWork := ftpwork;
ftpClient.OnWorkEnd := FtpWorkEnd; ftpClient.Connect(True,8000); ftpClient.ChangeDir(fDir);
IsDown := True;
ftpClient.Get(FileName,SavePath+'\'+FileName,True);
finally
ftpClient.Free;
end;
end;procedure TDownThread.FtpWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
if (AWorkMode = wmRead) and (IsDown = true) then
begin
FCurrentSize := AWorkCount; frm_Main.myLabel[fLines].Caption := fFileName + ' 下载进度:'+IntToStr(AWorkCount div 1024 )+'K/'+IntToStr(AllSize div 1024)+'K';
end;
end;procedure TDownThread.FtpWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
//
end; procedure TDownThread.FtpWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
if (AWorkMode = wmRead) and (IsDown = true) then
begin
if (fCurrentSize + 2048) >= fAllSize then
begin
frm_Main.myLabel[fLines].Caption := fFileName+ ' 下载完毕';
frm_Main.DownCount := frm_Main.DownCount + 1;
IsDown := False;
end
else
begin
frm_Main.myLabel[fLines].Caption := fFileName+ ' 下载意外终端,请重新下载...';
frm_Main.DownCount := frm_Main.DownCount + 1;
IsDown := False;
end;
end;
end;