📄 un_filedown.pas
字号:
unit Un_filedown;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
ComCtrls;
type
TfiledownThread = class(TThread)
private
public
server:string;
serverfile:string;
localfile:string;
start_p:integer;
end_p:integer;
procedure Execute; override;
end;
Tform_filedown = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label1: TLabel;
Label2: TLabel;
pb: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
function getfile(server:string;serverfile:string;localfile:string;start_p:integer;end_p:integer):bool;
end;
var
form_filedown: Tform_filedown;
implementation
uses Un_main;
{$R *.dfm}
{ Tform_filedown }
function Tform_filedown.getfile(server:string;serverfile:string;localfile:string; start_p,
end_p: integer): bool;
var
udpc:Tidudpclient;
size:integer;
buf:Tfilebuf;
i:integer;
cnt:integer;
tocnt:integer;
f:Tfilestream;
begin
udpc:=Tidudpclient.Create(nil);
udpc.Host:=server;
udpc.Port:=3001;
udpc.ReceiveTimeout:=3000;
udpc.Send('file'+#13#10+serverfile+#13#10+'1');
zeromemory(@buf,sizeof(buf));
udpc.ReceiveBuffer(buf,sizeof(buf));
if buf.pos<>0 then
begin
size:=buf.size;
cnt:=(size div sizeof(buf.buf))+1;
if not fileexists(localfile) then
f:=Tfilestream.Create(localfile,fmCreate)
else
f:=Tfilestream.Create(localfile,fmOpenWrite);
f.Position:=(start_p-1)* sizeof(buf.buf);
if (end_p=0) or (end_p>cnt) then
tocnt:=cnt
else
tocnt:=end_p;
pb.Position:=0;
pb.Max:=tocnt-start_p+1;
for i:=start_p to tocnt do
begin
pb.Position:=pb.Position+1;
zeromemory(@buf,sizeof(buf));
udpc.Send('file'+#13#10+serverfile+#13#10+inttostr(i));
udpc.ReceiveBuffer(buf,sizeof(buf));
if buf.pos=0 then
begin
showmessage('readtimeout!');
break;
end;
if not ((i=tocnt) and (cnt=tocnt)) then
begin
f.Write(buf.buf,sizeof(buf.buf));
end
else
begin
f.Write(buf.buf,(size mod sizeof(buf.buf)));
end;
application.ProcessMessages;
end;
f.Destroy;
end
else
begin
end;
udpc.Destroy;
end;
procedure Tform_filedown.Button1Click(Sender: TObject);
begin
label1.Caption:=datetimetostr(now);
getfile(edit1.Text,edit2.Text,edit3.Text,strtoint(edit4.Text),strtoint(edit5.Text));
label2.Caption:=datetimetostr(now);
end;
{ TfiledownThread }
procedure TfiledownThread.Execute;
begin
inherited;
form_filedown.getfile(server,serverfile,localfile,start_p,end_p);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -