Difference between revisions of "FindAllFiles/ru"

From Free Pascal wiki
Jump to navigationJump to search
 
(3 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.
 +
----
  
 
См.также:
 
См.также:
* http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/findallfiles.html
+
* https://lazarus-ccr.sourceforge.io/docs/lazutils/fileutil/findallfiles.html
* http://lazarus-ccr.sourceforge.net/docs/lcl/fileutil/tfilesearcher.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 26: Line 37:
  
 
'''Пример:'''
 
'''Пример:'''
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
uses  
 
uses  
 
   ..., FileUtil, ...
 
   ..., FileUtil, ...
Line 55: Line 66:
 
Функция ''FindAllFiles'' создает внутренний список строк. На первый взгляд это может показаться очень удобным, но создать '''утечки памяти''' очень просто:
 
Функция ''FindAllFiles'' создает внутренний список строк. На первый взгляд это может показаться очень удобным, но создать '''утечки памяти''' очень просто:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   // НИКОГДА ТАК НЕ ДЕЛАЙТЕ !!!! - Нет способа уничтожить список строк, созданный [функцией] FindAllFiles.
 
   // НИКОГДА ТАК НЕ ДЕЛАЙТЕ !!!! - Нет способа уничтожить список строк, созданный [функцией] FindAllFiles.
 
   Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);
 
   Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);

Latest revision as of 10:00, 13 September 2022

English (en) español (es) suomi (fi) français (fr) polski (pl) русский (ru)

Unit: Lazarus fileutil

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

  • Перейдите к Lazarus IDE Menu > Project(Проект) > Project Inspector(Инспектор проекта)
  • В диалоговом окне Project Inspector(Инспектор проекта) нажмите Add(Добавить) > New Requirement(Новая зависимость)
  • В диалоговом окне New Requirement(Новая зависимость) найдите пакет LazUtils и нажмите OK.

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


См.также:


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);
Light bulb  Примечание: Если вы хотите использовать эту функцию в программах командной строки, добавьте в требования проекта LCLBase, которое не будет тянуть весь LCL.