Node.js:如何在不上传文件列表的情况下检查文件夹是不是为空
Posted
技术标签:
【中文标题】Node.js:如何在不上传文件列表的情况下检查文件夹是不是为空【英文标题】:Node.js: How to check if folder is empty or not with out uploading list of filesNode.js:如何在不上传文件列表的情况下检查文件夹是否为空 【发布时间】:2013-01-12 17:33:24 【问题描述】:我正在使用Node.js
。
我想检查文件夹是否为空?一种选择是使用 fs.readdir ,但它会将一大堆文件加载到一个数组中。 我的文件夹中有超过 10000 个文件。加载文件名只是为了检查文件夹是否为空。所以寻找替代解决方案。
【问题讨论】:
【参考方案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()
done 值会告诉你目录是否为空
【讨论】:
【参考方案2】:如何使用节点原生fs
模块http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback。它的readdir
和readdirSync
函数为您提供了所有包含文件名的数组(不包括.
和..
)。如果长度为0
,则您的目录为空。
【讨论】:
他想避免调用 fs,readdir() 因为目标目录可能包含 很多 个文件。 我知道,但在发布问题时,这不是必需的。我想我会把它留作参考。【参考方案3】:顺便补充一下,有一个节点模块extfs,可以使用函数isEmpty()检查目录是否为空,如下面的代码sn-p所示:
var fs = require('extfs');
fs.isEmpty('/home/myFolder', function (empty)
console.log(empty);
);
查看有关此函数同步版本的文档链接。
【讨论】:
extfs' isEmpty 函数在内部也使用 fs.readDir。因此,它无论如何都会加载所有文件名。 github.com/codexar/npm-extfs/blob/master/extfs.js#L65-70【参考方案4】:您可以使用 exec() 从 NodeJS 中执行任何 *nix shell 命令。因此,为此您可以使用旧的 'ls -A $folder | wc -l' 命令(列出 $folder 中包含的所有文件/目录,将当前目录 (.) 和父目录 (..) 的条目隐藏在要从计数中排除的输出中,并计算它们的号)。
例如,如果 ./tmp 不包含以下文件/目录,则会显示“目录 ./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;
);
【讨论】:
plusone:在特定情况下,这是实现目标的“最佳”方式。【参考方案5】:通配符呢?即exists myDir/*
。节点不支持开箱即用(TOW v0.10.15),但一堆模块会为你做这件事,比如minimatch
【讨论】:
【参考方案6】:这是一个丑陋的黑客,但无论如何我都会把它扔掉。您可以在目录上调用fs.rmdir
。如果回调返回包含code: 'ENOTEMPTY'
的错误,则它不为空。如果成功,那么您可以致电fs.mkdir
并替换它。如果您的脚本是首先创建目录的脚本,并且具有适当的权限等,此解决方案可能才有意义。
【讨论】:
以上是关于Node.js:如何在不上传文件列表的情况下检查文件夹是不是为空的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 node.js 的情况下添加标准反应应用程序 [关闭]