yx-dirfile-rmjson
v1.0.2
Published
包含删除非空文件夹 大文件夹拷贝 文件夹转换JSON JSON转换文件夹操作
Downloads
6
Readme
删除非空文件夹
// 算法:删除非空文件夹
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);
}
}