JavaScript - 遍历文件夹, 并返回包含两个数组(文件|文件夹)的对象

app.js

const fs = require("fs");

let dirArray = []; // 这个的作用是存储结果
let flieArray = []; // 这个东西的作用是存储文件
let arrObj = {};
arrObj.dirArr = dirArray;
arrObj.fileArr = flieArray;
let number = 0; // number的作用是找到迭代结束的位置

/**
 *
 * @param {*} dir 路径
 * 迭代的函数本身, 它会调用foreach函数
 */
function readDirIter2(dir) {
  // 开始的时候加一
  number++;
  foreach(dir);
}

/**
 * 这个异步的作用是获取到结果
 */
async function getArray() {
  return new Promise((resolve, reject) => {
    let timer1 = setInterval(function () {
      if (number == 0) {
        resolve(arrObj);
        clearInterval(timer1);
      }
    }, 1);
  });
}

/**
 *
 * @param {*} dir 读取文件夹的路径
 * 这个文件的作用是读取路径
 */
async function readDir(dir) {
  return new Promise((resolve, reject) => {
    fs.readdir(dir + "/", (err, data) => {
      if (err) {
        console.log("路径错误");
        console.error(err);
        return;
      }
      resolve(data);
    });
  });
}

/**
 *
 * @param {} dir
 * 这个的作用是遍历路径值, 看路径是文件还是文件夹
 * 如果是文件夹则又调用路径读取迭代
 */
async function foreach(dir) {
  let data = await readDir(dir);

  if (data.length == 0) {
    // 如果数组长度为0 number减一
    --number;
  }

  data.forEach((el, index, arr) => {
    fs.stat(dir + "/" + el, (err, data) => {
      if (err) {
        // 这里代变整个代码错了
        console.log("路径错误");
        console.error(err);
        return;
      }

      if (!data.isFile()) {
        dirArray.push(dir + "/" + el);
        readDirIter2(dir + "/" + el);
      }

      if (data.isFile()) {
        flieArray.push(dir + "/" + el);
      }

      // 如果是文件且是最后一个number减一
      if (arr.length == index + 1) {
        --number;
      }
    });
  });
}

/**
 *
 * @param {*} dir 要查找的路径
 * 入口函数
 */
async function main(dir) {
  readDirIter2(dir);
  let obj = await getArray();
  return obj;
}

exports.main = main;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容