首页 > Web开发 > 详细

使用Nodejs计算文件夹中所有文件的大小

时间:2021-07-25 09:26:13      阅读:18      评论:0      收藏:0      [点我收藏+]

fs和path

NodeJS中的fs模块专门用于处理文件,path模块用于处理路径

利用这两个模块就可以自己实现对文件夹中所有文件大小的计算

同步计算方法

const fs=require(‘fs‘)
const path=require(‘path‘)

// 同步计算,利用回调函数和递归来完成多层级目录中的文件大小计算
function calcSizeSync(dirPath,cb){
    let fileSize=0
    let error=null
    function calc(dirPath,cb1){
        const statObj=fs.statSync(dirPath)
        if(statObj.isDirectory()){
            try {
                const files=fs.readdirSync(dirPath)
                let dirs=files.map(item=>{
                    return path.join(dirPath,item)
                })
                let index = 0
                function next () {
                  if (index < dirs.length) return cb1&&cb1()
                  let current = dirs[index++]
                  calc(current, next)
                }
                next()
            } catch (err) {
                error=err
            }
            
        }else{
            fileSize+=statObj.size
            cb1&&cb1()
        }
    }
    calc(dirPath)
    cb(error,fileSize)
}

异步计算方法,使用async/await

const fs=require(‘fs‘)
const path=require(‘path‘);
// 使用promisify方法来promise化指定方法
const { promisify } = require(‘util‘);
stat=promisify(fs.stat)
readdir=promisify(fs.readdir)

// 异步
async function calcSize(dirPath,cb){
    let fileSize=0;
    let error=null
    async function calc(dirPath){
        try {
            const statObj=await stat(dirPath)
            if(statObj.isDirectory()){
                const files=await readdir(dirPath)
                let dirs=files.map(item=>{
                    return path.join(dirPath,item)
                })
                let index = 0
                async function next () {
                    if (index < dirs.length){
                        let current = dirs[index++]
                        await calc(current)
                        await next()
                    }
                }
                return await next()
            }else{
                fileSize+=statObj.size
            }
        } catch (err) {
            error=err
        }
    }
    await calc(dirPath)
    cb(error,fileSize)
}

测试

calcSize(‘test‘,(err,size)=>{
    if(err) console.log(err)
    else console.log("异步执行文件大小:"+size)
})
calcSizeSync(‘test‘,(err,size)=>{
    if(err) console.log(err)
    else console.log("同步执行文件大小:"+size)
})

使用Nodejs计算文件夹中所有文件的大小

原文:https://www.cnblogs.com/MissSage/p/15056944.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!