Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

FindAllFiles/ru

English · Español · Français · Polski · Suomi · Русский

Unit: Lazarus fileutil

Чтобы подключить FileUtil в вашем проекте, добавьте LazUtils в необходимые пакеты. Проделайте следующее:


Прим. перев.: можно поступить по старинке, добавив данный модуль в секцию uses.


См.также:

pascal
procedure FindAllFiles(AList: TStrings; const SearchPath: String;
  SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); 

function FindAllFiles(const SearchPath: String; SearchMask: String = '';
  SearchSubDirs: Boolean = True): TStringList;

FindAllFiles ищет файлы, соответствующие маске поиска, в каталоге SearchPath и, если указано, в его вложенных папках, и заполняет stringlist результирующими именами файлов.

Маска может быть единственной маской, которую вы можете использовать с функциями FindFirst/FindNext, или она может состоять из списка масок, разделенных точкой с запятой(;).
Пробелы в маске рассматриваются как литералы.

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

Пример:

pascal
uses 
  ..., FileUtil, ...
var
  PascalFiles: TStringList;
begin
  PascalFiles := TStringList.Create;
  try
    FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //находим, например, все исходные файлы паскаля
    ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count]));
  finally
    PascalFiles.Free;
  end;

//или

begin
  //Нет необходимости создавать список строк; функция делает это для вас
  PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //находим, например, все исходные файлы паскаля
  try
    ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count]));
  finally
    PascalFiles.Free;
  end;

ВАЖНОЕ ЗАМЕЧАНИЕ: Функция FindAllFiles создает внутренний список строк. На первый взгляд это может показаться очень удобным, но создать утечки памяти очень просто:

pascal
  // НИКОГДА ТАК НЕ ДЕЛАЙТЕ !!!! - Нет способа уничтожить список строк, созданный [функцией] FindAllFiles.
  Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);

Note: Если вы хотите использовать эту функцию в программах командной строки, добавьте в требования проекта LCLBase, которое не будет тянуть весь LCL.


From the Free Pascal wiki, page "FindAllFiles/ru", as it stood on 2022-09-13 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Версия 1, последнее изменение: WikiArchive, .