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

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


当前回答

如果你在遍历一个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)因为我就是这样发现这个问题的。

其他回答

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

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

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

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

如果你在遍历一个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)因为我就是这样发现这个问题的。

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

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;因为它已经试验了一年了,最好不要依赖它。