我似乎找不到任何解释如何做到这一点的搜索结果。

所有我想做的是能够知道一个给定的路径是一个文件还是一个目录(文件夹)。


当前回答

根据您的需要,您可能依赖于node的path模块。

您可能无法访问文件系统(例如,文件还没有创建),tbh您可能希望避免访问文件系统,除非您确实需要额外的验证。如果您可以假设要检查的内容如下。<extname>格式,那么只需查看名称即可。

显然,如果您正在寻找一个没有extname的文件,您将需要访问文件系统以确定。但是要保持简单,直到你需要更复杂的。

const path = require('path');

function isFile(pathItem) {
  return !!path.extname(pathItem);
}

其他回答

这是我用的一个函数。在这篇文章中没有人使用承诺和等待/异步特性,所以我想分享一下。

const promisify = require('util').promisify;
const lstat = promisify(require('fs').lstat);

async function isDirectory (path) {
  try {
    return (await lstat(path)).isDirectory();
  }
  catch (e) {
    return false;
  }
}

注意:我没有使用require('fs').promises;因为它已经试验了一年了,最好不要依赖它。

下面的内容会告诉你。从文档中可以看出:

fs.lstatSync(path_string).isDirectory() 

从fs.stat()和fs.lstat()返回的对象就是这种类型。 stats.isFile () stats.isDirectory () stats.isBlockDevice () stats.isCharacterDevice () stats.isSymbolicLink() //(只对fs.lstat()有效) stats.isFIFO () stats.isSocket ()

注意:

上述解决方案将抛出一个错误,如果;对于ex,文件或目录不存在。

如果你想要一个真或假的方法,尝试fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();正如约瑟夫在下面的评论中提到的。

根据您的需要,您可能依赖于node的path模块。

您可能无法访问文件系统(例如,文件还没有创建),tbh您可能希望避免访问文件系统,除非您确实需要额外的验证。如果您可以假设要检查的内容如下。<extname>格式,那么只需查看名称即可。

显然,如果您正在寻找一个没有extname的文件,您将需要访问文件系统以确定。但是要保持简单,直到你需要更复杂的。

const path = require('path');

function isFile(pathItem) {
  return !!path.extname(pathItem);
}

返回类型的函数

我喜欢咖啡

type: (uri)-> (fina) ->
  fs.lstat uri, (erro,stats) ->
    console.log {erro} if erro
    fina(
      stats.isDirectory() and "directory" or
      stats.isFile() and "document" or
      stats.isSymbolicLink() and "link" or
      stats.isSocket() and "socket" or
      stats.isBlockDevice() and "block" or
      stats.isCharacterDevice() and "character" or
      stats.isFIFO() and "fifo"
    )

用法:

dozo.type("<path>") (type) ->
  console.log "type is #{type}"

我可以检查一个目录或文件是否存在:

// This returns if the file is not a directory.
if(fs.lstatSync(dir).isDirectory() == false) return;

// This returns if the folder is not a file.
if(fs.lstatSync(dir).isFile() == false) return;