Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2013, 14:43   #1
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию Поиск файлов по маске

Всем добрый день. Нужна помощь. Нашел небольшую процедуру по поиску файлов по маске. Но в ней не могу реализовать сообщение ShowMessage, которое будет выводиться после окончания поиска и показывать сколько файлов найдено. Прошу помочь с кодом и вообще подкорректировать если что то не так.
Вложения
Тип файла: rar поиск файлов по маске.rar (200.2 Кб, 12 просмотров)
kholoshchak вне форума Ответить с цитированием
Старый 31.10.2013, 14:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, shellapi;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var cnt:integer;
  Form1: TForm1;

implementation

{$R *.dfm}
Procedure FindRecursive(Const path: String; Const mask: String);
Var
 fullpath: String;
  Function Recurse( Var path: String; Const mask: String ): Boolean;
    Var
      SRec: TSearchRec;
      retval: Integer;
      oldlen: Integer;
    Begin
      Recurse := True;
      oldlen := Length(path);
      retval := FindFirst(path+mask, faAnyFile, SRec);
      While retval = 0 Do Begin
        Application.ProcessMessages;
        If (SRec.Attr and (faDirectory or faVolumeID)) = 0 Then
         with Form1.ListView1.Items.Add do
         begin
         caption:=SRec.Name;
         subitems.Add(path+srec.name);
         
         end;
        retval := FindNext(SRec);
      End;
      FindClose(SRec);
      If not Result Then Exit;
      retval := FindFirst( path+'*.*', faDirectory, SRec);
      While retval = 0 Do Begin
        If (SRec.Attr and faDirectory) <> 0 Then
          If (SRec.Name <> '.') and (SRec.Name <> '..') Then Begin inc(cnt);
            path := path + SRec.Name + '\';
            If not Recurse( path, mask ) Then Begin
              Result := False;
              Break;
            End; 
            Delete( path, oldlen+1, 255 );
          End;
        retval := FindNext( SRec );
      End;
      FindClose( SRec );
    End; // Recurse
Begin

 If path = '' Then GetDir(0, fullpath)
              Else fullpath := path;

 If fullpath[Length(fullpath)] <> '\' Then fullpath := fullpath + '\';

 If mask = '' Then  Recurse(fullpath, '*.*')
              Else  Recurse(fullpath, mask);





 End;

procedure TForm1.Button1Click(Sender: TObject);
begin
//FindRecursive('F:\','*.*');
FindRecursive(Edit1.Text,edit2.Text);
ShowMessage('Найдено: '+IntToStr(cnt));
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2013, 15:59   #3
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию

А почему при сканировании различный каталогов программа выдает одинаковый результат? Переменную "cnt" я обнуляю, в ней мусора не должно быть. При различных вариантах поиска результат одинаковый. В чем может быть проблема?
kholoshchak вне форума Ответить с цитированием
Старый 31.10.2013, 16:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну этого не скажу. Отладь пошаговкой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2013, 16:06   #5
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию

Хорошо. Буду разбираться дальше. А за помощь с диалоговым окном спасибо. Оказалось намного проще чем я думал.
kholoshchak вне форума Ответить с цитированием
Старый 31.10.2013, 16:26   #6
kholoshchak
Пользователь
 
Регистрация: 17.03.2011
Сообщений: 43
По умолчанию

А еще хотелось бы узнать, как в этом коде можно организовать индикатор процесса progressbar?
kholoshchak вне форума Ответить с цитированием
Старый 31.10.2013, 16:44   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У-у-у... Скорее никак )
Ты же не знаешь количество файлов изначально.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2013, 16:46   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А еще хотелось бы узнать, как в этом коде можно организовать индикатор процесса progressbar?
никак!
либо банально - "песочные часы", либо, как что-нибудь вращающееся, бегающее в цикле.
Оценить (даже примерно) сколько будет файлов во вложенных папках - невозможно.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск файлов по маске и нахождения общего размера найденных файлов и вывод в терминал Колямбий Помощь студентам 0 21.04.2013 21:31
Случайный поиск файлов по маске Armatus Общие вопросы C/C++ 8 13.04.2011 16:51
Поиск файлов по маске на FTP Stilet Win Api 2 13.04.2011 12:03
Поиск файлов по маске и их открытие в 1 workbook Toliyn Microsoft Office Excel 1 21.04.2010 04:45