Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Поиск файлов по маске в заданной директории

Delphi , Файловая система , Директории



Автор: Xavier Pacheco

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, FileCtrl, Grids, Outline, DirOutln;

type
  TMainForm = class(TForm)
    dcbDrives: TDriveComboBox;
    edtFileMask: TEdit;
    lblFileMask: TLabel;
    btnSearchForFiles: TButton;
    lbFiles: TListBox;
    dolDirectories: TDirectoryOutline;
    procedure btnSearchForFilesClick(Sender: TObject);
    procedure dcbDrivesChange(Sender: TObject);
  private
    FFileName: string;
    function GetDirectoryName(Dir: string): string;
    procedure FindFiles(APath: string);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

function TMainForm.GetDirectoryName(Dir: string): string;
{ This function formats the directory name so that it is a valid
  directory containing the back-slash (\) as the last character. }
begin
  if Dir[Length(Dir)] <> '\' then
    Result := Dir + '\'
  else
    Result := Dir;
end;

procedure TMainForm.FindFiles(APath: string);
{ This is a procedure which is called recursively so that it finds the
  file with a specified mask through the current directory and its
  sub-directories. }
var
  FSearchRec,
    DSearchRec: TSearchRec;
  FindResult: integer;

  function IsDirNotation(ADirName: string): Boolean;
  begin
    Result := (ADirName = '.') or (ADirName = '..');
  end;

begin
  APath := GetDirectoryName(APath); // Obtain a valid directory name
  { Find the first occurrence of the specified file name }
  FindResult := FindFirst(APath + FFileName, faAnyFile + faHidden +
    faSysFile + faReadOnly, FSearchRec);
  try
    { Continue to search for the files according to the specified
      mask. If found, add the files and their paths to the listbox.}
    while FindResult = 0 do
    begin
      lbFiles.Items.Add(LowerCase(APath + FSearchRec.Name));
      FindResult := FindNext(FSearchRec);
    end;

    { Now search the sub-directories of this current directory. Do this
      by using FindFirst to loop through each subdirectory, then call
      FindFiles (this function) again. This recursive process will
      continue until all sub-directories have been searched. }
    FindResult := FindFirst(APath + '*.*', faDirectory, DSearchRec);

    while FindResult = 0 do
    begin
      if ((DSearchRec.Attr and faDirectory) = faDirectory) and not
        IsDirNotation(DSearchRec.Name) then
        FindFiles(APath + DSearchRec.Name); // Recursion here
      FindResult := FindNext(DSearchRec);
    end;
  finally
    FindClose(FSearchRec);
  end;
end;

procedure TMainForm.btnSearchForFilesClick(Sender: TObject);
{ This method starts the searching process. It first changes the cursor
  to an hourglass since the process may take awhile. It then clears the
  listbox and calls the FindFiles() function which will be called
  recursively to search through sub-directories }
begin
  Screen.Cursor := crHourGlass;
  try
    lbFiles.Items.Clear;
    FFileName := edtFileMask.Text;
    FindFiles(dolDirectories.Directory);
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TMainForm.dcbDrivesChange(Sender: TObject);
begin
  dolDirectories.Drive := dcbDrives.Drive;
end;

end.

Программное приложение на Delphi, которое ищет файлы в указанной папке и ее подпапках по маске файла, введенной пользователем.

Вот обзор кода:

  1. Единица MainFrm содержит форму с несколькими компонентами:
    • TDriveComboBox (dcbDrives) для выбора диска.
    • Поле ввода (edtFileMask) для ввода маски файла.
    • Этiqueta (lblFileMask) для отображения маски файла.
    • Кнопка (btnSearchForFiles) для запуска процесса поиска.
    • Список (lbFiles) для отображения найденных файлов.
    • Компонент directory outline (dolDirectories) для выбора папки.
  2. Функция GetDirectoryName форматирует имя папки, добавляя обратный слеш в конце если он отсутствует.
  3. Процедура FindFiles отвечает за поиск файлов в указанной папке и ее подпапках. Она использует функции FindFirst и FindNext для поиска файлов, соответствующих маске файла, и затем добавляет их в список. Если подпапка найдена, она вызывает себя рекурсивно для поиска этой подпапки.
  4. Процедура btnSearchForFilesClick запускает процесс поиска, очищая список, устанавливая имя файла для соответствия маске файла, введенной пользователем, и вызывая процедуру FindFiles.
  5. Процедура dcbDrivesChange обновляет компонент directory outline при изменении выбора диска.

Некоторые предложения по улучшению:

  • Рассмотрите использование более надежного метода обработки ошибок и исключений. Например, вы можете использовать блоки try-except для ловли любых ошибок, которые могут возникнуть во время процесса поиска.
  • Вам может понравиться добавить индикатор прогресса или другой индикатор прогресса, так как процесс поиска может занять некоторое время для больших папок.
  • Вы также можете улучшить пользовательский интерфейс, добавив больше обратной связи, например, обновление списка при обнаружении файлов или отображение сообщения при отсутствии файлов.

В целом, этот код предоставляет хорошую основу для создания приложения поиска файлов. Однако всегда есть место для улучшения и оптимизации, чтобы сделать его более надежным и эффективным.

Статья рассказывает о программе, которая ищет файлы в заданной директории по маске.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-19 00:45:25/0.0051939487457275/1