FindAllFiles/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: FindAllFiles/ru
| Old | New | Line | |
|---|---|---|---|
| 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).* |
