如何确定目录是否为nodejs的空目录

Qiu*_*Qiu 11 path fs node.js

我搜索过Nodejs Doc,但是找不到相关的API.

所以我编写以下代码来确定目录是否为空目录.

var fs = require('fs');

function isEmptyDir(dirnane){
    try{
        fs.rmdirSync(dirname)
    }
    catch(err){
        return false;
    }
    fs.mkdirSync(dirname);
    return true
}
Run Code Online (Sandbox Code Playgroud)

问题:看起来有点麻烦,有更好的方法用nodejs做吗?

jfr*_*d00 20

我想我想知道为什么你不只是列出目录中的文件,看看你是否收到任何文件?

fs.readdir(dirname, function(err, files) {
    if (err) {
       // some sort of error
    } else {
       if (!files.length) {
           // directory appears to be empty
       }
    }
});
Run Code Online (Sandbox Code Playgroud)

当然,你也可以制作同步版本.

当然,这并不能保证目录中没有任何内容,但它确实意味着没有您有权查看的公共文件.


Rus*_*olm 10

像您尝试的简单同步功能:

const fs = require('fs');

function isEmpty(path) {
    return fs.readdirSync(path).length === 0;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

有可能使用opendir为目录创建迭代器的方法调用。

这将消除读取所有文件的需要并避免潜在的内存和时间开销

import {promises as fsp} from "fs"
const dirIter = await fsp.opendir(_folderPath);
const {value,done} = await dirIter[Symbol.asyncIterator]().next();
await dirIter.close()
Run Code Online (Sandbox Code Playgroud)

done 值会告诉您目录是否为空

  • 仅当 dirIter 未完成时才应调用 close(): if (!done) { wait dirIter.close() } (2认同)