⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dloaddirthreadunit.pas

📁 DELPHI 下远程控制源码
💻 PAS
字号:
unit DLoadDirThreadUnit;

interface

uses
  Classes,IdTCPServer,SysUtils, IdGlobal,ComCtrls;

type
  TDLoadDirThread = class(TThread)
  private
    { Private declarations }
    ThisUser   :String;
    ReadTheDir :String;
    SysThread  :TIdPeerThread;
	      //---------------单个文件文件发送
    procedure SendTheFile(TheFName:String;AThread:TIdPeerThread);
  protected
    procedure Execute; override;
    procedure RegisteLog;
  public
    constructor Create(AThread:TIdPeerThread;TheUser,TheDLDir:String);
    destructor  Destroy; override;
    procedure SendAllDirFile;
  end;

implementation
uses  unit2;
    
	   //获取指定目录下的所有文件名
procedure GetFileList(ThePath:String;TheList:TStrings); 
Var
    sr: TSearchRec;
begin
    if FindFirst(ThePath+'*.*',faAnyFile, sr) = 0 then
    begin
      repeat 
	if (Sr.Attr<16) then
		  TheList.Add(ThePath+Sr.Name);
	if (Sr.Attr>=32) then
	  if (sr.Attr<48) then
		  TheList.Add(ThePath+Sr.Name);
	if (Sr.Attr<32) and (Sr.Attr>=16) then
	begin
	   if (Sr.Name<>'.') then 
	    if (Sr.Name<>'..') then
	     GetfileList(ThePath+Sr.Name+'\',TheList);
	end;
	if (Sr.Attr>=48) then
	begin
	   if (Sr.Name<>'.') then 
	    if (Sr.Name<>'..') then
	     GetfileList(ThePath+Sr.Name+'\',TheList);
	end;	
      until FindNext(sr) <> 0;       
    end;
    FindClose(sr);
end;
constructor TDLoadDirThread.Create(AThread:TIdPeerThread;TheUser,TheDLDir:String);
begin
   inherited Create(True);
   ThisUser        :=TheUser;   
   SysThread       :=AThread;
   ReadTheDir      :=TheDLDir;
   FreeOnTerminate :=False;      
end;
//---------------单个文件文件发送
procedure TDLoadDirThread.SendTheFile(TheFName:String;AThread:TIdPeerThread);
var
  FromF: file of byte;
  FileLen:integer;
  NumRead: Integer;
  Buf: array[1..32768] of Char;
begin
   try
     AssignFile(FromF,TheFName);
     FileMode:=0;
     Reset(FromF);
     Seek(FromF,0);
     FileLen:=FileSize(FromF); 
   except      
     CloseFile(FromF);
     exit;
   end;
   try       
     AThread.Connection.WriteInteger(FileLen);
   except
     CloseFile(FromF);     
     exit;
   end;
   try
    repeat
      AThread.Connection.OpenWriteBuffer;
      BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
      AThread.Connection.WriteBuffer(Buf,NumRead);
      AThread.Connection.CloseWriteBuffer;
    until (NumRead = 0);
   except
     CloseFile(FromF);      
     exit;
   end;
   CloseFile(FromF);
end;
procedure TDLoadDirThread.SendAllDirFile;
var
   ReadNextStrID :String;
   TheFileName   :String;   
   TheFListStream:TStringStream;
   TheFileList   :TStringList;
   iWriteLen     :integer;  
begin
   Synchronize(RegisteLog);
   Try
     TheFListStream:=TStringStream.Create('');
     TheFileList   :=TStringList.Create;
   except
     SysThread.Connection.Disconnect;
     self.Terminate;
     exit;
   end;
      
   GetFileList(ReadTheDir,TheFileList); //搜集文件列表
   
   TheFileList.SaveToStream(TheFListStream);//
   iWriteLen:=TheFListStream.Size;
   try
     SysThread.Connection.WriteInteger(iWriteLen);
     SysThread.Connection.WriteStream(TheFListStream);
   except
     TheFListStream.Free;
     TheFileList.Free;
     self.Terminate;
     exit;
   end;    
   TheFListStream.Free;
   TheFileList.Free;
   
    Repeat
      try
       ReadNextStrID:=SysThread.Connection.ReadLn(EOL);
       if ReadNextStrID='文件连续申请' then
       begin
	TheFileName:=SysThread.Connection.ReadLn(EOL);
	SendTheFile(TheFileName,SysThread);
       end;
      except 
	Self.Terminate;
	exit;
      end;
    until ReadNextStrID='可以断开了';    
    self.Terminate;
end;
procedure TDLoadDirThread.RegisteLog;
var
  TheListItem:TListItem;
begin
  if Form2.LogCheckBox.Checked=false then exit;
  TheListItem:=Form2.ListView5.Items.Insert(0);
  TheListItem.Caption:=SysThread.Connection.Socket.Binding.PeerIP;
  TheListItem.StateIndex:=9;
  TheListItem.SubItems.Add(ThisUser);
  TheListItem.SubItems.Add('目录下载');
  TheListItem.SubItems.Add(ReadTheDir);
  TheListItem.SubItems.Add(DateTimeToStr(now));
end;
procedure TDLoadDirThread.Execute;
begin
end;
destructor TDLoadDirThread.Destroy;
begin
  inherited destroy;
end;
end.

⌨️ 快捷键说明

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