首页 > 解决方案 > 如何使用 fs.readdir 获取标准文件夹列表

问题描述

我正在使用 node.js 做某事。我需要读取特定路径内的所有文件和文件夹并返回标准“文件夹”。例如,当我将“MAC HD”作为路径时,我希望获得“应用程序”、“库”、“系统”、“用户”作为结果。我需要获取所有未隐藏的文件夹。在 Windows 中,我有同样的问题 我需要标准文件夹或常规的未隐藏文件夹,而不是系统文件夹。

这是我的整个代码:

const child = require('child_process');
var fs = require('fs');
const os = require('os');

const currentPlatform = () => {
  if ('darwin' === os.platform()) {
    return 'MAC';
  } else {
    return 'WIN';
  }
};

const getDriveList = (data, emitter) => {
  const thisPlatform = currentPlatform();
  if (thisPlatform === 'WIN') {
    child.exec('wmic logicaldisk get name', (error, stdout) => {
      let winDriveList = stdout
        .split('\r\r\n')
        .filter(value => /[A-Za-z]:/.test(value))
        .map(value => value.trim());
      emitter('getDriveList', winDriveList);
    });
  } else {
    fs.readdir('/Volumes', (err, files) => {
      emitter('getDriveList', files);
    });
  }
};

const getFilesList = (path, emitter) => {
  console.log("this was sent from client ===>> ", path);
  fs.readdir(path, (err, files) => {
    emitter('getFileList', files);
  });
};

标签: node.jswindowsmacos

解决方案


不知道这样的东西是否存在,你如何定义“标准文件夹”?听起来您只想/在 mac 和 windows 下获取目录列表,您可能需要在注册表中挖掘您要查找的内容。

您可以使用fs.stat来获取有关给定路径的详细信息,无论它是目录还是文件。

fs.stat('/Users', (err, stats) => {
  if (err) throw err;
  if (stats.isDirectory()) console.log("Its a directory!");
});

默认情况下,Nodejs 没有公开检测隐藏文件的方法,您可以尝试使用hidefile库,该库具有一些特定于平台的逻辑来检测文件是否隐藏。

hidefile.isHidden("/Users", function(err, result) {
   if (err == null) console.log(result);  //-> false
});

推荐阅读