fs--目录克隆

本文详细介绍了如何利用Node.js内置的fs模块,实现对目录的完整克隆,包括递归遍历目录、复制文件及保留权限等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var fs = require('fs');
var path = require('path');
function copyFile (src, dist, callback) {
    // 读取目标文件夹
    fs.readdir(src, function (err, paths) {
        if (err) {
            throw err;
        }
        // 遍历目录
        paths.forEach(function (file) {
            // 拼接文件路径
            var pathname = path.join(src, file);
            var distname = path.join(dist, file);
            // 查看文件/文件夹信息
            fs.stat(pathname, function (err, st) {
                if (err) {
                    throw err;
                }
                // 如果是个文件
                if (st.isFile()) {
                    // 调用回调函数执行拷贝
                    callback && callback(pathname, distname, st.size);
                } else {
                    // 如果是文件夹,则判断文件夹是否存在,不存在就创建该文件夹,存在就直接拷贝文件夹里的内容
                    if (!fs.existsSync(distname)) {
                        fs.mkdirSync(distname);
                        copyFile(pathname, distname, callback);
                    } else {
                        copyFile(pathname, distname, callback);
                    }
                }
            });
        });
    });
}
copyFile(path.resolve('src'), path.resolve('dist'), function (pathname, distname, size) {
    // 判断文件大小,大文件以流的形式拷贝
    if (size / 1024 / 1024 > 300) {
        var rs = fs.createReadStream(pathname);
        var ws = fs.createWriteStream(distname);
        rs.pipe(ws);
    } else {
        fs.writeFileSync(distname, fs.readFileSync(pathname));
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值