Node.js:如何在没有上传文件列表的情况下检查文件夹是否为空

时间:2013-01-29 07:43:53

标签: file node.js directory fs

我正在使用Node.js

我想检查文件夹是否为空?一种选择是使用 fs.readdir ,但它会将整堆文件加载到一个数组中。 我在该文件夹中有超过10000个文件。加载文件名仅用于检查文件夹是否为空。所以寻找替代解决方案。

6 个答案:

答案 0 :(得分:12)

如何使用节点native fs module http://nodejs.org/api/fs.html#fs_fs_readdir_path_callbackreaddirreaddirSync函数为您提供了包含所有文件名的数组(...除外)。如果长度为0,那么您的目录为空。

答案 1 :(得分:11)

这是一个丑陋的黑客,但无论如何我都会扔掉它。您只需在目录上调用fs.rmdir即可。如果回调返回包含code: 'ENOTEMPTY'的错误,则它不为空。如果成功,则可以调用fs.mkdir并替换它。如果您的脚本是首先创建目录,具有适当权限等的脚本,则此解决方案可能才有意义。

答案 2 :(得分:5)

您可以使用exec()从NodeJS中执行任何* nix shell命令。所以为此你可以使用旧的'ls -A $ {folder} | wc -l'命令(列出$ {folder}中包含的所有文件/目录,隐藏当前目录(。)的条目和要从计数中排除的输出的父目录(..),并计算它们的数量数)。

例如,如果./tmp包含下面没有文件/目录,则会显示'Directory ./tmp为空。'。否则,它将显示它包含的文件/目录的数量。

var dir = './tmp';
exec( 'ls -A ' + dir + ' | wc -l', function (error, stdout, stderr) {
    if( !error ){
        var numberOfFilesAsString = stdout.trim();
        if( numberOfFilesAsString === '0' ){
            console.log( 'Directory ' + dir + ' is empty.' );
        }
        else {
            console.log( 'Directory ' + dir + ' contains ' + numberOfFilesAsString + ' files/directories.' );
        }
    }
    else {
        throw error;
    }
});

答案 3 :(得分:1)

与我在how to determine whether the directory is empty directory with nodejs中的答案重复

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

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

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

完成值将告诉您目录是否为空

答案 4 :(得分:0)

全球化怎么样?即,exists myDir/*。它不是逐个节点支持的(TOW v0.10.15),但是一堆模块会为你做这些,比如minimatch

答案 5 :(得分:0)

就像添加一个节点模块extfs,可以使用函数 isEmpty()检查目录是否为空,如下面的代码片段所示: / p>

var fs = require('extfs');

fs.isEmpty('/home/myFolder', function (empty) {
  console.log(empty);
});

查看链接以获取有关此功能同步版本的文档。