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.