需求:
递归遍历多层结构的目录,在其他位置创建响应结构的目录。
遍历目录的时候当目录中有文件时,获取该目录中所有的文件名称,并在创建新目录的时候在该目录对应的目录中创建一个txt文件用来保存响应的文件名称
问题:
现在可以创建目录,也可以获取文件名,但不能把文件名分组存放到响应的目录中,不能实现一一对应
示例:
源目录结构
目录1
子目录1
孙子目录1
文件1、文件2、文件3
目录2
子目录2
孙子目录2
文件1、文件2、文件3
希望实现
目录1
子目录1
孙子目录1
文件1(这个文件里存放源对应目录中的文件名称)
目录2
子目录2
孙子目录2
文件2(这个文件里存放源对应目录中的文件名称)
const fs = require('fs')
const path = require('path')
const join = require('path').join
const mkdirp = require('mkdirp')
let arr = []
function getImageFiles(imageFolder) {
// 递归
function findImages(imageFolder) {
fs.readdir(imageFolder, (err, files) => { // 读取目录
files.forEach((item, index) => { // item: 目录和文件名称
// console.log(item);
let filesPath = path.resolve(imageFolder, item) // 绝对路径:e:\wirteImgSrc\image
fs.stat(filesPath, (err, stats) => { // 检测类型
if (err) throw err
if (stats.isDirectory()) {
let txtFolderPath = filesPath.replace('image', 'txt')
mkdirp(txtFolderPath, (err) => { // 批量创建目录
if (err) throw err
})
findImages(filesPath)
}
if (stats.isFile()) {
console.log(filesPath);
arr.push(item)
// console.log(arr);
// setTimeout(function () {
// let imageUrl = filesPath.split(path.sep).join('/') // 扶正反斜杠
// imageUrl = imageUrl.replace(__dirname.split(path.sep).join('/'), '').replace('image/', '')
// arr.push(imageUrl)
// let createTxt = path.resolve(__dirname, imageFolder).replace('image', 'txt') + '/html.txt'
// let txtContent = arr
// fs.writeFile(createTxt, txtContent, 'utf-8', err => {
// if (err) throw err
// })
// }, 1000)
}
})
})
})
}
findImages(imageFolder)
}
getImageFiles("image")
自己搞定了,记录一下~
还有很多优化空间,目前暂时理清楚了思路