Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.07.2016, 14:59
JapanStyle JapanStyle вне форума
Прохожий
 
Регистрация: 06.11.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Потоки в поиске файлов на ftp (Indy)

Всем доброго времени суток. Сделал программульку для поиска файлов заданного расширения на ресурсе. Однако анализ всех, порядка 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;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter