首页 > 其他分享 >使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数,用于获取指定文件夹中所有文件的总大小,并根据配置决定是否返回已转换单位的大小值或直

使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数,用于获取指定文件夹中所有文件的总大小,并根据配置决定是否返回已转换单位的大小值或直

时间:2024-05-12 14:09:23浏览次数:13  
标签:返回 fs const 函数 format packageOpt 大小

使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数,用于获取指定文件夹中所有文件的总大小,并根据配置决定是否返回已转换单位的大小值或直接通过回调函数返回字节大小。
下面是一个基于Node.js环境的实现示例,因为直接在浏览器环境中操作文件系统是受限的。

请注意,此示例使用Node.js的fspath模块来遍历目录和读取文件大小,确保您在Node.js环境下运行这段代码。

import fs from 'fs';
import path from 'path';

// 示例接口类型
interface packageOpt {
    /** 文件夹名(默认:`dist`) */
    folder?: string;
    /** 是否返回已经转化好单位的包总大小(默认:`true`) */
    format?: boolean;
    /** 回调函数,返回包总大小(单位:字节) */
    callback: (size: string | number) => void;
}


/**
 * 获取指定文件夹中所有文件的总大小
 * @param options 配置选项
 */
const getPackageSize = (options: packageOpt): void => {
    const { folder = 'dist', format = true, callback } = options;

    let totalSize = 0;

    // 递归函数,用于遍历目录并累加文件大小
    const traverseDir = (dirPath: string) => {
        fs.readdirSync(dirPath).forEach((file) => {
            const filePath = path.join(dirPath, file);
            const stats = fs.statSync(filePath);

            if (stats.isDirectory()) {
                traverseDir(filePath); // 如果是目录,则递归遍历
            } else {
                totalSize += stats.size; // 如果是文件,则累加大小
            }
        });
    };

    // 开始遍历指定目录
    traverseDir(folder);

    // 根据format决定是否转换单位,并调用callback
    const result = format ? formatBytes(totalSize) : totalSize;
    callback(result);
};

// 字节转换为可读单位的辅助函数
const formatBytes = (bytes: number, decimals = 2) => {
    if (bytes === 0) return '0 Bytes';

    const k = 1024;
    const dm = decimals < 0 ? 0 : decimals;
    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

    const i = Math.floor(Math.log(bytes) / Math.log(k));

    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
};


// 使用示例
getPackageSize({
    folder: './exampleFolder',
    format: true,
    callback(size) {
        console.log(`Total size: ${size}`);
    },
});

这段代码首先定义了getPackageSize函数,它接收一个实现了packageOpt接口的对象作为参数。函数内部使用fs.readdirSyncfs.statSync同步遍历指定目录下的所有文件和子目录,累加文件大小。
之后,根据format选项决定是否调用formatBytes函数将字节大小转换为可读的单位(如KB、MB等),最后通过回调函数返回计算结果。

标签:返回,fs,const,函数,format,packageOpt,大小
From: https://www.cnblogs.com/longmo666/p/18187760

相关文章

  • Effective C++:2.构造、析构、赋值函数
    几乎每个class都会有一个或者多个构造函数,一个析构函数,一个copyassignment函数,因此有必要加深理解1.条款05:了解C++默默编写并调用哪些函数如果你没有生成一下函数,那么C++会在需要的时候(被调用)帮你自动生成这些函数:default构造函数copy构造函数default析构函数copyassign......
  • 系统IO常用函数接口
    本文整理归纳了几种常用的系统IO的函数借口,以供读者查阅使用目录系统IO与标准IO的区别打开文件:open关闭文件:close文件读取:read文件写入:write位置偏移:lseek系统IO与标准IO的区别1.标准IO可以看成是在系统IO的基础上封装了缓冲机制。2.标准IO在内核中使用链表的管理方式,故返回的......
  • 使用nodejs创建返回xml的web server
    //ImportNode.jscoremodulei.ehttpconsthttp=require('http');constfs=require('fs').promises;consthost='localhost';constport=8000;constrssFileName="/news.rss";//Createwebserverconstserve......
  • wps的VLOOKUP函数只显示公式不显示结果,在公式中已经出现结果了,但在表格中不显示结果
     在公式中已经有结果了,但是表格中只显示公式1、在公式那里点击“显示公式”就可以2、选中公式列后更改格式 ......
  • 42.C语言有关函数的学习整理
    先看一个简单的函数实现的就是将数组里面的数加起来\t缩进相当于Tab键inta[10]={9,8,7,6,5,4,3,2,1,0};for(inti=0;i<10;++i)a[i]=add(a[i],i);for(inti=0;i<10;++i)printf("%d\t",a[i]); intadd(i......
  • tp6 递归函数使用
    publicfunctionfindLastClass($id){$classInfo=Db::name('class')->where('id',$id)->find();if($classInfo&&$classInfo['islast']==1){//如果当前记录的islast为1,直接返回return$classInfo......
  • 利用系统IO读取磁盘上指定BMP图片的宽和高以及大小
    文件IO代码/***************************************************************************************filename:1.c*author: [email protected]*date:2024/05/11*function: 利用系统IO读取磁盘上指定BMP图片的宽和高以及大小*......
  • 获取任意bmp图片的参数函数设计
    /**@Author:[email protected]*@Date:2024-05-0814:24:52*@LastEditors:[email protected]*@LastEditTime:2024-05-1118:57:02*@FilePath:\数据结构text\text,.c*@Description:这是默认设置,请设置`customMade`,打开koroFileHeader查看配置进行设......
  • 返回Rich return value结果思考
    本文是在写过的代码中进行回顾,有理解不对的地方,望请指正!在库(Library)或框架(Framework)设计中,"Richreturnvalue"是指返回值的丰富性,意味着函数返回的不仅仅是一个简单的值,而是一个包含了额外信息的复合类型。这样的设计可以提供更多的上下文信息,方便调用者理解和处理函数的执行......
  • jmeter函数记录
    1、Jmeter时间偏移函数:__timeShift2、#vars保存对象类型(包括List,Map,closure之类),使用如下方法:#vars.putObject("object_name",Object);3、Jmeter执行文件与上传文件在同一文件夹下,获取相对路径先用BeanShell函数获取当前路径:importorg.apache.jmeter.services.File......