gpt4 book ai didi

javascript - 文件数量计数不正确

转载 作者:行者123 更新时间:2023-12-01 02:30:00 27 4
gpt4 key购买 nike

我有一个包含 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com