Difference between revisions of "FindAllFiles/ru"
(Created page with "{{FindAllFiles}} Unit: Lazarus fileutil См.также: * http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/findallfiles.html * http://lazarus-ccr.sourceforge.n...") |
|||
(7 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
[[Unit]]: | [[Unit]]: | ||
Lazarus [[fileutil]] | Lazarus [[fileutil]] | ||
+ | |||
+ | Чтобы подключить FileUtil в вашем проекте, добавьте LazUtils в необходимые пакеты. Проделайте следующее: | ||
+ | |||
+ | * Перейдите к ''Lazarus IDE Menu'' > ''Project''(Проект) > ''Project Inspector''(Инспектор проекта) | ||
+ | * В диалоговом окне ''Project Inspector''(Инспектор проекта) нажмите ''Add''(Добавить) > ''New Requirement''(Новая зависимость) | ||
+ | * В диалоговом окне ''New Requirement''(Новая зависимость) найдите пакет ''LazUtils'' и нажмите OK. | ||
+ | |||
+ | ---- | ||
+ | [[user:Zoltanleo|Прим. перев.]]: можно поступить по старинке, добавив данный модуль в секцию uses. | ||
+ | ---- | ||
См.также: | См.также: | ||
− | * | + | * https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/findallfiles.html |
− | * | + | * https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/searchfileinpath.html |
+ | * https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/searchallfilesinpath.html | ||
+ | |||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
procedure FindAllFiles(AList: TStrings; const SearchPath: String; | procedure FindAllFiles(AList: TStrings; const SearchPath: String; | ||
SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); | SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); | ||
Line 16: | Line 28: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | '''FindAllFiles''' | + | '''FindAllFiles''' ищет файлы, соответствующие маске поиска, в каталоге SearchPath и, если указано, в его вложенных папках, и заполняет [[TStrings|stringlist]] результирующими именами файлов. |
− | + | Маска может быть единственной маской, которую вы можете использовать с функциями FindFirst/FindNext, или она может состоять из списка масок, разделенных [[Semicolon|точкой с запятой(;)]].<br> | |
− | + | Пробелы в маске рассматриваются как литералы. | |
− | |||
− | + | Есть две перегруженные версии этой процедуры. Первая из них представляет собой '''[[Procedure/ru|процедуру]]''' и предполагает, что получающий список строк уже создан. | |
− | + | Вторая - это '''[[Function/ru|функция]]''', которая создает список строк внутри себя и возвращает его как результат функции. В обоих случаях список строк должен быть уничтожен вызывающей процедурой. | |
− | ''' | + | '''Пример:''' |
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
uses | uses | ||
..., FileUtil, ... | ..., FileUtil, ... | ||
Line 34: | Line 45: | ||
PascalFiles := TStringList.Create; | PascalFiles := TStringList.Create; | ||
try | try | ||
− | FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); // | + | FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //находим, например, все исходные файлы паскаля |
ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count])); | ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count])); | ||
finally | finally | ||
Line 40: | Line 51: | ||
end; | end; | ||
− | // | + | //или |
begin | begin | ||
− | // | + | //Нет необходимости создавать список строк; функция делает это для вас |
− | PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); // | + | PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //находим, например, все исходные файлы паскаля |
try | try | ||
ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count])); | ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count])); | ||
Line 52: | Line 63: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ''' | + | '''ВАЖНОЕ ЗАМЕЧАНИЕ:''' |
− | + | Функция ''FindAllFiles'' создает внутренний список строк. На первый взгляд это может показаться очень удобным, но создать '''утечки памяти''' очень просто: | |
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
− | // | + | // НИКОГДА ТАК НЕ ДЕЛАЙТЕ !!!! - Нет способа уничтожить список строк, созданный [функцией] FindAllFiles. |
Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); | Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | {{Note| | + | {{Note|Если вы хотите использовать эту функцию в программах командной строки, добавьте в требования проекта ''LCLBase'', которое не будет тянуть весь LCL.}} |
Latest revision as of 10:00, 13 September 2022
│
English (en) │
español (es) │
suomi (fi) │
français (fr) │
polski (pl) │
русский (ru) │
Чтобы подключить FileUtil в вашем проекте, добавьте LazUtils в необходимые пакеты. Проделайте следующее:
- Перейдите к Lazarus IDE Menu > Project(Проект) > Project Inspector(Инспектор проекта)
- В диалоговом окне Project Inspector(Инспектор проекта) нажмите Add(Добавить) > New Requirement(Новая зависимость)
- В диалоговом окне New Requirement(Новая зависимость) найдите пакет LazUtils и нажмите OK.
Прим. перев.: можно поступить по старинке, добавив данный модуль в секцию uses.
См.также:
- https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/findallfiles.html
- https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/searchfileinpath.html
- https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/searchallfilesinpath.html
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, или она может состоять из списка масок, разделенных точкой с запятой(;).
Пробелы в маске рассматриваются как литералы.
Есть две перегруженные версии этой процедуры. Первая из них представляет собой процедуру и предполагает, что получающий список строк уже создан. Вторая - это функция, которая создает список строк внутри себя и возвращает его как результат функции. В обоих случаях список строк должен быть уничтожен вызывающей процедурой.
Пример:
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 создает внутренний список строк. На первый взгляд это может показаться очень удобным, но создать утечки памяти очень просто:
// НИКОГДА ТАК НЕ ДЕЛАЙТЕ !!!! - Нет способа уничтожить список строк, созданный [функцией] FindAllFiles.
Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);