1.0.2 • Published 3 years ago

yx-dirfile-rmjson v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
3 years ago

删除非空文件夹

// 算法:删除非空文件夹
function removeDir(dir) {
    // 读取子目录
    let arr = fs.readdirSync(dir);
    // 循环遍历子目录
    arr.forEach(v => {
        // 拼接正确目录(相对路径)
        v = path.join(dir, v);
        // 读取文件信息
        let info = fs.statSync(v);
        if (info.isFile()) {
            fs.unlinkSync(v);
        } else {
            // 是文件夹
            // 递归
            removeDir(v);
        }
    });
    // 删除文件夹
    fs.rmdirSync(dir);
}

大文件夹拷贝

// 算法:大文件夹拷贝
function copyDir(src, dest, size = 4 * 1024 * 1024) {
    // 文件夹不存在就创建
    !fs.existsSync(dest) && fs.mkdirSync(dest);
    // 循环文件夹列表
    fs.readdirSync(src).forEach(pathname => {
        // 拼接相对路径
        let midSrc = path.join(src, pathname),
            midDest = path.join(dest, pathname),
            // 获取文件信息
            info = fs.statSync(midSrc);
        // 是文件
        if (info.isFile()) {
            // 大文件的流式读取拷贝
            if (info.size > size) {
                let read = fs.createReadStream(midSrc),
                    write = fs.createWriteStream(midDest);
                // 链接管道
                read.pipe(write);
                console.log('复制大文件' + '文件名字' + pathname);
            } else {
                fs.copyFileSync(midSrc, midDest);
            }
            console.log('当前文件:' + pathname + '文件大小:' + info.size);
        } else {
            // 是文件夹
            copyDir(midSrc, midDest, size);
        }
    });
}

文件夹转换JSON对象

// 算法:文件夹转换JSON对象
function dirToJSON(dirname) {
    // 读取目录信息
    let info = fs.statSync(dirname);
    // 文件
    if (info.isFile()) {
        return {
            // 路径
            pathname: dirname,
            // 类型
            type: 'file',
            // 扩展名
            ext: path.extname(dirname),
            size: info.size,
            content: fs.readFileSync(dirname, 'utf8')
        }
    } else {
        // 文件夹
        return {
            // 目录
            pathname: dirname,
            type: 'dir',
            ext: path.extname(dirname),
            children: fs.readdirSync(dirname).map(v => {
                // 拼接路径
                v = path.join(dirname, v);
                // 递归
                return dirToJSON(v);
            })
        }
    }
}

JSON对象转换文件夹

// JSON对象转换文件夹
function JSONToDir(data) {
    // 是文件夹
    if (data.type === 'dir') {
        // 创建文件夹
        fs.mkdirSync(data.pathname);
        // 循环子目录 递归
        data.children.forEach(v => JSONToDir(v));
    } else if (data.type === 'file') {
        // 是文件 写入文件
        fs.writeFileSync(data.pathname, data.content);
    }
}
1.0.2

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago