downloadfileunit.~pas

来自「DELPHI 下远程控制源码」· ~PAS 代码 · 共 99 行

~PAS
99
字号
unit DownLoadFileUnit;

interface

uses
  Classes, IdTCPServer,IdGlobal,ComCtrls,SysUtils;

type
  TDownLoadThread = class(TThread)
  private
    TheFileName,TheUserName:String;
    ThePosition:integer;
    SysThread:TIdPeerThread;
    Procedure RegisteLog;
  protected
    procedure Execute; override;
  Public
    constructor Create(AThread: TIdPeerThread;TFN,TUN:String;ThePos:integer);
    destructor Destroy; override;
  end;

implementation 
uses APFUnit,Unit2;

constructor TDownLoadThread.Create(AThread: TIdPeerThread;
				  TFN,TUN:String;ThePos:integer);
begin
   inherited Create(True);
   TheFileName:=TFN;
   TheUserName:=TUN;
   ThePosition:=ThePos;
   SysThread:=AThread;
   FreeOnTerminate:=True;
   Suspended := false;
end;
procedure TDownLoadThread.RegisteLog;
var
  TheListItem:TListItem;
begin
  if Form2.LogCheckBox.Checked=false then exit;
  TheListItem:=Form2.ListView5.Items.Insert(0);
  TheListItem.Caption:=SysThread.Connection.Binding.PeerIP;
  TheListItem.StateIndex:=9;
  TheListItem.SubItems.Add(TheUserName);
  TheListItem.SubItems.Add('文件下载');
  TheListItem.SubItems.Add(TheFileName);
  TheListItem.SubItems.Add(DateTimeToStr(now));
end;
procedure TDownLoadThread.Execute;
var
  FromF: file of byte;
  FileLen:integer;
  NumRead, NumWritten: Integer;
  Buf: array[1..32768] of Char;
begin
   Synchronize(RegisteLog);
   try
     AssignFile(FromF,TheFileName);
     FileMode:=0;
     Reset(FromF);
     Seek(FromF,ThePosition);
   except
      Try
	CloseFile(FromF);
      except
      end;
      Self.Terminate;
      exit;
   end;
   try
     FileLen:=FileSize(FromF);  
     SysThread.Connection.WriteInteger(FileLen-ThePosition);
   except
     CloseFile(FromF);
     Self.Terminate;
     exit;
   end;
   
    repeat
     try
      SysThread.Connection.OpenWriteBuffer;
      BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
      SysThread.Connection.WriteBuffer(Buf,NumRead);
      SysThread.Connection.CloseWriteBuffer;
     except
       CloseFile(FromF);
       exit;
      end;
    until (NumRead = 0);    
    CloseFile(FromF);
    SysThread.Connection.Disconnect;
    self.Terminate;
end;
destructor TDownLoadThread.Destroy;
begin
  inherited destroy;
end;
end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?