Всем доброго времени суток. Сделал программульку для поиска файлов заданного расширения на ресурсе. Однако анализ всех, порядка 125 тыс. файлов занимает довольно продолжительное время. Вычитал, что поможет решить задачу применение потоков. Пните, подскажите, укажите что-куда-чего-кому, ибо первый раз встречаюсь с таким.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, HTTPApp, HTTPProd, MSHTML, ActiveX,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdFTP,Wininet, IdFTPCommon, IdFTPList,
IdAntiFreezeBase, IdAntiFreeze;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit4: TEdit;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
WebBrowser1: TWebBrowser;
IdFTP1: TIdFTP;
Button4: TButton;
Label12: TLabel;
IdAntiFreeze1: TIdAntiFreeze;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Procedure PoiskIndy(var Schet1,Schet2,Schet3:integer; dir:string);
end;
var
Form1: TForm1;
S1,S2,S3:integer;
implementation
{$R *.dfm}
uses unit2;
procedure TForm1.FormCreate(Sender: TObject);
begin
S1:=0;S2:=0;S3:=0;
end;
Procedure TForm1.PoiskIndy(var Schet1,Schet2,Schet3:integer; dir:string);
var i,q:integer;f,a1:string; LS:TStrings;
begin
idftp1.ChangeDir(dir);
idftp1.List(nil);
Listbox1.Items.Add(idftp1.RetrieveCurrentDir);
if idftp1.DirectoryListing.Count =0 then begin idftp1.ChangeDirUp; end;
for i:=0 to idftp1.DirectoryListing.Count-1 do begin
if (idftp1.DirectoryListing.Items[i].ItemType = ditdirectory) then
begin
a1:=idftp1.DirectoryListing.Items[i].Filename;
PoiskIndy(Schet1,Schet2,Schet3,a1);
end;
if (ExtractFileExt(idftp1.DirectoryListing.Items[i].FileName)=Form1.Edit2.text) or (ExtractFileExt(idftp1.DirectoryListing.Items[i].FileName)=Edit3.text) then begin
ListBox1.Items.Add(idftp1.DirectoryListing.Items[i].FileName);
if (ExtractFileExt(idftp1.DirectoryListing.Items[i].FileName)=Edit2.text) then Schet1:=Schet1+1;
if (ExtractFileExt(idftp1.DirectoryListing.Items[i].FileName)=Edit3.text) then Schet2:=Schet2+1;
end;
Schet3:=Schet3+1;
end;
idftp1.ChangeDirUp;
idftp1.List(nil);
s1:=schet1;s2:=schet2;s3:=schet3;
end;
procedure TForm1.Button4Click(Sender: TObject);
var a:string;
begin
a:=Edit1.text;
idftp1.Host:='mirror.yandex.ru'; idftp1.Username:='Anonymous'; idftp1.Password:='';
idftp1.Port:=21; idftp1.Connect;
PoiskIndy(s1,s2,s3,a);
Label1.Caption:=IntToStr(s1); Label10.Caption:=IntToStr(s2); Label11.Caption:=IntToStr(s3);
if Assigned(idftp1) then idftp1.Disconnect;
end;