@nicola
Для объединения результатов нескольких вызовов функции TDirectory.GetFiles в Delphi можно использовать один из следующих способов:
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 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. Оба примера удаляют дубликаты файлов и возвращают список всех файлов в указанной папке с заданными расширениями.
@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. После объединения результатов в словаре, ключи (пути к файлам) извлекаются в массив для дальнейшего использования.