📄 tsearchthreadunit.~pas
字号:
unit TSearchThreadUnit;
interface
uses
Classes,IdTCPServer,SysUtils,IdGlobal,ComCtrls;
type
TSearchThread = class(TThread)
private
{ Private declarations }
TheFileType :String;
TheFileSize :integer;
TheFilePath :string;
TheUser :String;
SysThread :TIdPeerThread;
protected
procedure SearchFile(ThePath:String);
procedure Execute; override;
procedure RegisteLog;
public
constructor Create(AThread:TIdPeerThread;ThisFileType:String;
ThisFileSize:integer;ThisFilePath:string;
ThisUser:String);
destructor Destroy; override;
end;
implementation
uses unit2;
procedure TSearchThread.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(TheUser);
TheListItem.SubItems.Add('文件搜索');
TheListItem.SubItems.Add('搜索路径:'+TheFilePath+',类型:'+TheFileType);
TheListItem.SubItems.Add(DateTimeToStr(now));
end;
constructor TSearchThread.Create(AThread:TIdPeerThread;ThisFileType:String;
ThisFileSize:integer;ThisFilePath:string;
ThisUser:String);
begin
SysThread :=AThread;
TheFileType:=ThisFileType;
TheFileSize:=ThisFileSize;
TheFilePath:=ThisFilePath;
TheUser :=ThisUser;
FreeOnTerminate :=True;
inherited Create(False);
end;
procedure TSearchThread.SearchFile(ThePath:string);
Var
sr: TSearchRec;
begin
if FindFirst(ThePath+'*.*',faAnyFile, sr) = 0 then
begin
repeat
//============================================1
if (Sr.Attr<16) then
begin
if TheFileType='*.*' then
if sr.Size>=TheFileSize then
begin
try
SysThread.Connection.Write(ThePath+sr.Name+EOL);
SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
SysThread.Connection.Write(DateTimeToStr(
FileDateToDateTime((sr.Time)))+EOL);
except
FindClose(sr);
exit;
end;
end;
if AnsiUpperCase(TheFileType)=
AnsiUpperCase('*'+ExtractFileExt(sr.Name)) then
if sr.Size>=TheFileSize then
begin
try
SysThread.Connection.Write(ThePath+sr.Name+EOL);
SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
SysThread.Connection.Write(DateTimeToStr(
FileDateToDateTime((sr.Time)))+EOL);
except
FindClose(sr);
exit;
end;
end;
end;
//=============================================2
if (Sr.Attr>=32) then
if (Sr.Attr<48) then
begin
if TheFileType='*.*' then
if sr.Size>=TheFileSize then
begin
try
SysThread.Connection.Write(ThePath+sr.Name+EOL);
SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
SysThread.Connection.Write(DateTimeToStr(
FileDateToDateTime((sr.Time)))+EOL);
except
FindClose(sr);
exit;
end;
end;
if AnsiUpperCase(TheFileType)=
AnsiUpperCase('*'+ExtractFileExt(sr.Name)) then
if sr.Size>=TheFileSize then
begin
try
SysThread.Connection.Write(ThePath+sr.Name+EOL);
SysThread.Connection.Write(IntToStr(sr.Size)+EOL);
SysThread.Connection.Write(DateTimeToStr(
FileDateToDateTime((sr.Time)))+EOL);
except
FindClose(sr);
exit;
end;
end;
end;
//============================================3
if (Sr.Attr<32) and (Sr.Attr>=16) then
begin
if (Sr.Name<>'.') then
if (Sr.Name<>'..') then
SearchFile(ThePath+Sr.Name+'\');
end;
if (Sr.Attr>=48) then
begin
if (Sr.Name<>'.') then
if (Sr.Name<>'..') then
SearchFile(ThePath+Sr.Name+'\');
end;
until FindNext(sr) <> 0;
end;
FindClose(sr);
end;
procedure TSearchThread.Execute;
begin
Synchronize(RegisteLog);
if DirectoryExists(TheFilePath)=false then
begin
try
SysThread.Connection.Write('搜索完毕'+EOL);
except
Self.Terminate;
SysThread.Free;
exit;
end;
SysThread.Connection.Disconnect;
SysThread.Free;
Self.Terminate;
exit;
end;
try
SearchFile(TheFilePath);
except
Self.Terminate;
SysThread.Free;
exit;
end;
try
SysThread.Connection.Write('搜索完毕'+EOL);
except
Self.Terminate;
SysThread.Free;
exit;
end;
SysThread.Connection.Disconnect;
SysThread.Free;
Self.Terminate;
end;
destructor TSearchThread.Destroy;
begin
inherited destroy;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -