Sign in Join
Wiki copytemporary

FindAllFiles/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: FindAllFiles/ru

OldNewLine
1+[[Unit]]: Lazarus [[fileutil]]
2+
3+Чтобы подключить FileUtil в вашем проекте, добавьте LazUtils в необходимые пакеты. Проделайте следующее:
4+
5+- Перейдите к *Lazarus IDE Menu* \> *Project*(Проект) \> *Project Inspector*(Инспектор проекта)
6+- В диалоговом окне *Project Inspector*(Инспектор проекта) нажмите *Add*(Добавить) \> *New Requirement*(Новая зависимость)
7+- В диалоговом окне *New Requirement*(Новая зависимость) найдите пакет *LazUtils* и нажмите OK.
8+
9+------------------------------------------------------------------------
10+
11+Прим. перев.: можно поступить по старинке, добавив данный модуль в секцию uses.
12+
13+------------------------------------------------------------------------
14+
15+См.также:
16+
17+- <https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/findallfiles.html>
18+- <https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/searchfileinpath.html>
19+- <https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/searchallfilesinpath.html>
20+
21+``` pascal
22+procedure FindAllFiles(AList: TStrings; const SearchPath: String;
23+ SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory);
24+
25+function FindAllFiles(const SearchPath: String; SearchMask: String = '';
26+ SearchSubDirs: Boolean = True): TStringList;
27+```
28+
29+**FindAllFiles** ищет файлы, соответствующие маске поиска, в каталоге SearchPath и, если указано, в его вложенных папках, и заполняет [[TStrings|stringlist]] результирующими именами файлов.
30+
31+Маска может быть единственной маской, которую вы можете использовать с функциями FindFirst/FindNext, или она может состоять из списка масок, разделенных [[Semicolon|точкой с запятой(;)]].\
32+Пробелы в маске рассматриваются как литералы.
33+
34+Есть две перегруженные версии этой процедуры. Первая из них представляет собой **[[Procedure/ru|процедуру]]** и предполагает, что получающий список строк уже создан. Вторая - это **[[Function/ru|функция]]**, которая создает список строк внутри себя и возвращает его как результат функции. В обоих случаях список строк должен быть уничтожен вызывающей процедурой.
35+
36+**Пример:**
37+
38+``` pascal
39+uses
40+ ..., FileUtil, ...
41+var
42+ PascalFiles: TStringList;
43+begin
44+ PascalFiles := TStringList.Create;
45+ try
46+ FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //находим, например, все исходные файлы паскаля
47+ ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count]));
48+ finally
49+ PascalFiles.Free;
50+ end;
51+
52+//или
53+
54+begin
55+ //Нет необходимости создавать список строк; функция делает это для вас
56+ PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //находим, например, все исходные файлы паскаля
57+ try
58+ ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count]));
59+ finally
60+ PascalFiles.Free;
61+ end;
62+```
63+
64+**ВАЖНОЕ ЗАМЕЧАНИЕ:** Функция *FindAllFiles* создает внутренний список строк. На первый взгляд это может показаться очень удобным, но создать **утечки памяти** очень просто:
65+
66+``` pascal
67+ // НИКОГДА ТАК НЕ ДЕЛАЙТЕ !!!! - Нет способа уничтожить список строк, созданный [функцией] FindAllFiles.
68+ Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);
69+```
70+
71+> **Note:** Если вы хотите использовать эту функцию в программах командной строки, добавьте в требования проекта *LCLBase*, которое не будет тянуть весь LCL.
72+
73+---
74+*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](/wiki-contact).*

Back to history