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

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


当前回答

根据您的需要,您可能依赖于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;因为它已经试验了一年了,最好不要依赖它。

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

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

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

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

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

const path = require('path');

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

如果你在遍历一个directory1时需要这个

自节点10.10+,fs。readdir有withFileTypes选项,使其返回目录项fs。Dirent而不是filename。目录条目包含它的名称和有用的方法,如isDirectory或isFile,因此不需要调用fs。lstat明确!

你可以这样使用它:

import { promises as fs } from 'fs';

// ./my-dir has two subdirectories: dir-a, and dir-b
const dirEntries = await fs.readdir('./my-dir', { withFileTypes: true });

// let's filter all directories in ./my-dir
const onlyDirs = dirEntries.filter(de => de.isDirectory()).map(de => de.name);
// onlyDirs is now [ 'dir-a', 'dir-b' ]

1)因为我就是这样发现这个问题的。

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

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