1 Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象
1.1 问题场景
在JavaScript中遍历目录,使用for.. in循环时,无法获取到Files对象和SubFolders对象,导致无法遍历目录和子目录。
代码如下:
function GetAllFilesInSubFolder(path, filter)
{var stack = new Array(); //目录压栈。var fileList = new Array(); //文件列表var folder = "";var objFolder;var fso = new ActiveXObject("Scripting.FileSystemObject");var objFile;var strFilePath;var i, j ;stack.push(path); //根目录先填充到队列while(stack.length > 0){folder = stack.pop();if(FolderExists(folder)){objFolder = fso.GetFolder(folder);for(var objFile in objFolder.Files) //无法获取文件,不能进入循环。{strFilePath = objFile.Path;if(strFilePath.search(filter) > 0){//HTML文件加入队列。fileList.push(strFilePath);}}for(var objFd in objFolder.SubFolders) //无法获取子文件夹,不能进入循环{stack.push(objFd.Path);}}else{print_error(sprintf("文件夹不存在:<%s>", folder));}}return fileList;
}
1.2 修正方法
经常尝试和查找网络资料, 正常工作的遍历目录的Javascript函数如下:
// ---------------------------------------------------------------------------
// @fn 获取给定目录下的所有文件,包括子文件夹下的文件
// @param[in] path 指定目录
// @param[in] filter 过滤条件(扩展名)
// @return 文件列表数组
// @author tyysoft
// @date 2024-11-00 08:39:18
// @note 无
// ---------------------------------------------------------------------------
function GetAllFilesInSubFolder(path, filter)
{var stack = new Array(); //目录压栈。var fileList = new Array(); //文件列表var folder = "";var objFolder;var fso = new ActiveXObject("Scripting.FileSystemObject");var objFile;var strFilePath;var i, j ;stack.push(path); //根目录先填充到队列while(stack.length > 0){folder = stack.pop();if(FolderExists(folder)){objFolder = fso.GetFolder(folder);var fileEnum = new Enumerator(objFolder.Files);for(i = 0; !fileEnum.atEnd(); fileEnum.moveNext(),i++){strFilePath = fileEnum.item().Path;if(strFilePath.search(filter) > 0){//HTML文件加入队列。fileList.push(strFilePath);}}var folderEnum = new Enumerator(objFolder.SubFolders);for(i = 0; !folderEnum.atEnd(); folderEnum.moveNext(),i++){stack.push(folderEnum.item().Path);}}else{print_error(sprintf("文件夹不存在:<%s>", folder));}}return fileList;
}
文档作者声明:本文档仅用于学习交流,未经作者许可,不得将本文档用于其他目的。
Copyright © 2022~2024 All rights reserved.