Рекурсивный обход файлов в NodeJS

В одной из прошлых статей "Создание, чтение и удаление папок в NodeJS" мы рассмотрели метод для удаления папок "rmdir". Но было сказано, что данный метод не умеет удалять папки, в которых находятся файлы. Поэтому необходимо комбинировать метод для обхода папок и метод удаления файлов, чтобы удалить всё.

В этой статье попробуем написать код, который будет рекурсивно обходить все файлы и папки.

Определить файл или папка

Для этой задачи потребуется механизм определения является ли объект файлом или папкой. Делается это с помощью метода "stat" модуля "fs". Этот метод возвращает все данные об объекте. Для работы ему первым параметром необходимо передать полный или относительный путь к файлу, а вторым - стрелочную функцию для обработки ошибок и получения текущего статуса. Второй параметр функции получает объект класса Stats, у которого есть множество методов для проверки свойств файла. К примеру, "isDirectory" проверяет действительно ли объект является директорией и возвращает логические true или false. Аналогично работает и метод "isFile", только он возвращает true, если объект является файлов:
let fs = require('fs');
fs.stat('file.txt', (err, status) => {
   if(err) throw err; // не удалось получить данные статуса

   if(status.isDerictory()){
      console.log('Это папка');
   }
   if(status.isFile()){
      console.log('Это простой файл');
   }
});
Зная этот метод для отделения файлов от папок попробуем сделать рекурсивное удаление информации из директории. Для этого прочитаем всё содержимое папки через readdir рекурсивно. Здесь никак не обойтись без рекурсивной функции. Напишем этот код:
let fs = require('fs');
let readFrom = 'folder/'; // из какой папки нужно всё прочитать

function listObjects(path){
   fs.readdir(path, (err, files) => {
      if(err) throw err;

      for (let file of files){
         fs.stat('file.txt', (errStat, status) => {
            if(errStat) throw errStat;

            if(status.isDerictory()){
               console.log('Папка: ' + file);
               listObjects(path + '/' + file); // продолжаем рекурсию
            }else{
               console.log('Файл: ' + file);
            }
         });
      }
   });
}

listObjects(readFrom);
В результате выполнения такого кода в консоль будет выведен ряд строк, который будет выглядеть примерно так:
Папка: subfolder 
Файл: MyFile.txt
Файл: SecondFile.txt
Папка: one_more_folder
Файл: exec_file
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб