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

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


当前回答

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

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

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

const path = require('path');

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

其他回答

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

// 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;

说真的,问题是存在了五年,却没有好的表象?

function isDir(path) {
    try {
        var stat = fs.lstatSync(path);
        return stat.isDirectory();
    } catch (e) {
        // lstatSync throws an error if path doesn't exist
        return false;
    }
}

根据您的需要,您可能依赖于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}"

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

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();正如约瑟夫在下面的评论中提到的。