Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象问题的解决方法

 

 

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.

posted @ 2024-12-01 14:09  tyysoft  阅读(57)  评论(0编辑  收藏  举报