Javascript遍歷目錄時使用for..in迴圈無法獲取Files物件和SubFolders物件問題的解決方法

tyysoft發表於2024-12-01

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.

相關文章