javascript - 文件数量计数不正确

标签 javascript node.js increment

我有一个包含 264420 个文件的目录

$ find /Users/Username -type f | wc -l
    264420

我正在尝试使用简单的 counter++ 在 Node.js 中递归地计算文件数量

问题是 counter++ 给出的文件数量不正确,而 array.push(file)array.length 最终工作很好,并返回正确数量的文件 - 264420

$ node total-files.js

114 'total_files_count' 
264420 'total_files_array_count'

简化的脚本如下所示:

const fs = require('fs')
const path = require('path')
const dir = '/Users/Username'
let totalFiles = 0
let totalFilesArray = []

const totalFilesObj = getFilesRecursively(dir, totalFiles, totalFilesArray)

console.log(totalFilesObj.total_files, 'total_files_count', totalFilesObj.total_files_array.length, 'total_files_array_count')


function getFilesRecursively(dir, totalFiles, totalFilesArray){

    totalFiles = totalFiles || 0
    totalFilesArray = totalFilesArray || []  

    try { var files = fs.readdirSync(dir) }
    catch(err) { console.error(err.message)  }

    for (var i in files) {

        var name = path.join(dir, files[i])

        try {  

            let stats = fs.lstatSync(name)  // track symlink as link, but not as file

            if (stats.isDirectory()) 
                getFilesRecursively(name, totalFiles, totalFilesArray) 

            else if (stats.isFile()) {
                totalFiles++   // why this not working? so we should use .push to array instead?
                totalFilesArray.push(name) 
            }

        } catch(err) { console.error(err.message) }     
    }

    return { "total_files" : totalFiles, "total_files_array" : totalFilesArray }
}

我计划在包含数十万个文件的大型目录上运行脚本,并希望使用计数器增量,这比推送到数组更快。

请帮忙。

最佳答案

两个原因

  • 您没有将递归的返回值添加到最终值中。
  • 增加原始值不会将该值更改回调用方函数的作用域中。

成功

if (stats.isDirectory()) 
{
     var returnVal  = getFilesRecursively(name, totalFiles, totalFilesArray);
     totalFiles +=  returnVal.total_files;
}

此外,在方法开头将 totalFiles 值设置为 0

关于javascript - 文件数量计数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48378411/

相关文章:

node.js - 加载sequelize中关系为空的项目

javascript - 将 canvas.toDataURL() 传递给 ffmpeg.wasm 问题

javascript - 提交两个表单,其中 form2 输入值取决于 form1 输入值

javascript - 使用javascript获取页面url

JavaScript 模块关键字

javascript - 当 `listener must be a function` 返回函数时,Node.js EventEmitter 函数错误 `typeof` - 可能是范围问题

javascript - 确定字符串是否至少有 2 个来自数组的相同元素

python - 在 for 循环中通过三元运算符递增不同的变量

javascript 增量(大于++)样式属性

java - Java三元运算符的自增