Как объединить результаты нескольких вызовов tdirectory.getfiles в delphi?

Пользователь

от nicola , в категории: Другие , 2 года назад

Как объединить результаты нескольких вызовов tdirectory.getfiles в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от landen.nienow , 2 года назад

@nicola 

Для объединения результатов нескольких вызовов функции TDirectory.GetFiles в Delphi можно использовать один из следующих способов:

  1. Использовать массив динамических строк (TArray<string>) для хранения результатов каждого вызова функции TDirectory.GetFiles, а затем объединить все элементы массивов в один массив с помощью функции TArray.Concat. Пример кода:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
var
  files: TArray<string>;
  dir: string;
begin
  dir := 'C:MyFolder';
  SetLength(files, 0);
  for var filePath in TDirectory.GetFiles(dir, '*.txt', TSearchOption.soTopDirectoryOnly) do
    files := files + [filePath];
  for var filePath in TDirectory.GetFiles(dir, '*.log', TSearchOption.soTopDirectoryOnly) do
    files := files + [filePath];
  // объединяем все элементы массивов в один массив
  files := TArray.Concat<string>(files1, files2);
end;


  1. Использовать объект TStringList для хранения результатов каждого вызова функции TDirectory.GetFiles, а затем объединить все элементы списков в один список с помощью метода TStrings.AddStrings. Пример кода:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var
  files: TStringList;
  dir: string;
begin
  dir := 'C:MyFolder';
  files := TStringList.Create;
  try
    // получаем список файлов с расширением .txt
    files.AddStrings(TDirectory.GetFiles(dir, '*.txt', TSearchOption.soTopDirectoryOnly));
    // получаем список файлов с расширением .log
    files.AddStrings(TDirectory.GetFiles(dir, '*.log', TSearchOption.soTopDirectoryOnly));
    // объединяем все элементы списков в один список
    files.Sorted := True;
    files.Duplicates := TDuplicates.dupIgnore; // удаляем дубликаты
  finally
    files.Free;
  end;
end;


Оба примера объединяют результаты вызовов функции TDirectory.GetFiles для файлов с расширениями .txt и .log в папке C:MyFolder. Первый пример использует массив динамических строк для хранения результатов, а второй - объект TStringList. Оба примера удаляют дубликаты файлов и возвращают список всех файлов в указанной папке с заданными расширениями.

Пользователь

от marlen , 6 месяцев назад

@nicola 

Дополнительно к предложенным способам, можно также использовать словарь (TDictionary) для хранения результатов каждого вызова функции TDirectory.GetFiles в Delphi. Пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var
  filesDict: TDictionary<string, Integer>;
  dir: string;
  filePaths: TArray<string>;
  files: TArray<string>;
begin
  dir := 'C:MyFolder';
  filesDict := TDictionary<string, Integer>.Create;
  try
    // получаем список файлов с расширением .txt
    filePaths := TDirectory.GetFiles(dir, '*.txt', TSearchOption.soTopDirectoryOnly);
    for var filePath in filePaths do
      filesDict.AddOrSetValue(filePath, 1);

    // получаем список файлов с расширением .log
    filePaths := TDirectory.GetFiles(dir, '*.log', TSearchOption.soTopDirectoryOnly);
    for var filePath in filePaths do
      filesDict.AddOrSetValue(filePath, 1);

    // извлекаем ключи из словаря в массив
    SetLength(files, filesDict.Count);
    filesDict.Keys.CopyTo(files, 0);
  finally
    filesDict.Free;
  end;

  // использование массива files с объединенными результатами вызовов функции TDirectory.GetFiles
end;


Этот пример использует словарь для хранения уникальных путей к файлам, которые были получены из различных вызовов функции TDirectory.GetFiles. После объединения результатов в словаре, ключи (пути к файлам) извлекаются в массив для дальнейшего использования.