我正在使用Node.js
。
我想检查文件夹是否为空?一种选择是使用 fs.readdir ,但它会将整堆文件加载到一个数组中。 我在该文件夹中有超过10000个文件。加载文件名仅用于检查文件夹是否为空。所以寻找替代解决方案。
答案 0 :(得分:12)
如何使用节点native fs
module http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback。 readdir
和readdirSync
函数为您提供了包含所有文件名的数组(.
和..
除外)。如果长度为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);
});
查看链接以获取有关此功能同步版本的文档。