В Node.js можно рекурсивно получить структурированный массив всех файлов и папок в указанной директории с помощью рекурсивной функции и модуля fs.
Первым шагом нам понадобится подключить модуль fs, который обеспечивает доступ к файловой системе:
const fs = require('fs');
Затем мы определим функцию getFilesAndFolders
, которая будет принимать путь к директории в качестве аргумента и возвращать структурированный массив:
function getFilesAndFolders(directory) { // создаем пустой массив для хранения файлов и папок let filesAndFolders = []; // получаем список файлов и папок в указанной директории const list = fs.readdirSync(directory); // перебираем каждый элемент в списке list.forEach(item => { // получаем полный путь к файлу или папке const fullPath = `${directory}/${item}`; // проверяем, является ли элемент файлом или папкой const isDirectory = fs.statSync(fullPath).isDirectory(); // добавляем элемент в массив filesAndFolders.push({ name: item, // имя файла или папки path: fullPath, // полный путь к файлу или папке isDirectory: isDirectory, // флаг, показывающий, является ли элемент папкой }); // если элемент является папкой, вызываем рекурсивно функцию getFilesAndFolders if (isDirectory) { filesAndFolders = filesAndFolders.concat(getFilesAndFolders(fullPath)); } }); return filesAndFolders; }
Теперь мы можем вызывать функцию getFilesAndFolders
, указывая путь к директории в качестве аргумента, и получать структурированный массив всех файлов и папок:
const directory = 'путь/к/директории'; // замените на свой путь const filesAndFolders = getFilesAndFolders(directory); console.log(filesAndFolders);
Обратите внимание, что данное решение использует синхронные методы readdirSync
и statSync
, которые блокируют выполнение программы до завершения операций чтения файловой системы. Такой подход может быть неподходящим в случае, если в директории находится большое количество файлов или папок. В таком случае рекомендуется использовать асинхронные методы и операции с колбэками или промисами.