|
本帖最后由 opiona 于 2024-10-27 18:51 编辑
做了简单升级, 去掉了字典的使用
- //函数: ListFolderToArr 指定文件夹 的子文件夹清单 到向下到第几层子文件
- function ListFolderToArr(PathFolder,SubFolder= 0,StrSplitor= "\"){
- //函数: ListFolderToArr 指定文件夹 的子文件夹清单 到向下到第几层子文件
- //参数: PathFolder 需查找的文件夹路径,不包含文件名
- //参数: SubFolder 可选,向下到第几层子文件夹,可省略,默认为:0 就是全部
- //参数: StrSplitor 可选,各级文件夹分隔符
- //方法: let pathArr=ListFolderToArr(PathFolder,0)
- //整理: 北极狐工作室 QQ:14885553
-
- let X,folder,path,folderA,file,strTemp
- let ArrayOut=[];
- folder=PathFolder //防止参数值因为函数而产生变化 用一个局部变量代替
- folder = folder.replace(/(\\|\/)$/, ""); //去除最后一个正斜杠或者反斜杠(如果存在的话)
- folder = folder.replace(/\//g, "\"); //全部 正斜杠 弄成 反斜杠
-
- //FileSystem.readdirSync(path) //只提取第一层
- if(folder.length>0){
- let pathArr = [] //空白数组备用 放文件名
- let queue = [folder] //入队 将一个元素放入数组中 放文件夹名
- while (queue.length > 0) {
- folderA = queue.shift() //出队 删除数组的第一个元素,并返回被删除的元素
- pathArr.push(folderA) //入队 向数组的末尾添加一个或多个元素,并更新数组的长度
- file = Dir(folderA + "\\*", jsDirectory); //jsDirectory=16 指定文件夹内的全部文件和子文件夹
- while(file != "") { //遍历当前层级文件
- if(file != "." && file != ".."){ //排除"."与".."
- path = folderA +"\"+ file //文件或文件夹的绝对路径
- if(GetAttr(path) == jsDirectory){ //是否为文件夹
- strTemp=path.replace(folder +"\","") //去掉更目录路径 后 还有几个 \ 就是第几层
- if(strTemp.split("\").length<= SubFolder || SubFolder == 0){
- queue.push(path) //是就入队
- if(StrSplitor!= "\"){
- path=path.replace(/\\/g, "/"); //全部 正斜杠 弄成 反斜杠
- }
- ArrayOut.push(path) //放入数组,可能用重复值
- }
- }
- }
- file = Dir(); //下一个文件
- }
- }
- }
- if(ArrayOut.length==0){
- ArrayOut[0]=""
- } else {
- ArrayOut=[...new Set(ArrayOut)]; //一维数组去重 ES6新的数据结构
- //ArrayOut=ArrayOut.filter((item, index, ArrayOut) => ArrayOut.indexOf(item) == index); //一维数组去重
- ArrayOut.sort()
- }
- return ArrayOut
- }
复制代码 |
|