如何使用fs.readdir获取标准文件夹列表

时间:2018-12-31 16:36:13

标签: node.js windows macos

我正在使用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);
  });
};

1 个答案:

答案 0 :(得分:1)

我不知道这样的事情是否存在,如何定义“标准文件夹”?听起来好像您只想在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
});