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.
Javascript遍历目录时使用for..in循环无法获取Files对象和SubFolders对象问题的解决方法的更多相关文章
- 关于vue-cli3打包时遇到Cannot assign to read only property 'exports' of object '#<Object>'问题的解决方法。
vue-cli3打包时遇到Cannot assign to read only property 'exports' of object '#<Object>'问题的解决方法. 大致是说, ...
- WebMagic编译时提示Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.18的解决方法
问题描述: 从http://git.oschina.net/flashsword20/webmagic 下载最新代码,按照http://webmagic.io/docs/zh/posts/ch3 ...
- Python和Ruby抓取网页时的中文乱码问题(在Eclipse和Apatana Studio下均是这种解决方法
Python抓取中文网页乱码 :Eclipse+pydev2.2+python2.7 :Apatana Studio3+ pydev2.2+python2.7 run时设置 run--&g ...
- 使用MSBUILD 构建时出错 error MSB3086: Task could not find "sgen.exe" using the SdkToolsPath的解决方法
如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...
- VMware安装时Error 1324. The path My Documents contains a invalid character的原因和解决方法
终于找到了自己想要的答案,顶顶,吼吼~ 我今天安装VMware Workstation时,总是提示我Error 1324. The path My Documents contains a inval ...
- Linux登录MySQL时出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'解决方法
在Linux上登录MySQL时出现如下提示,如下图: 通过查找资料了解到: MySQL有两种连接方式: (1)TCP/IP (2)socket 对mysql.sock来说,其作用是程序与mysqlse ...
- Tomcat的webapps目录下的classes文件夹下缺失编译好的.class文件原因及其解决方法
右键,选择BuildPath: 可以编辑Output folder,指定编译后的文件的存放目录,一般是target/classes目录
- GetModuleFileNameEx遍历获取64bit程序路径失败的一种解决方法(Win7-64-bit)
问题: 32位程序在64位系统上调用GetModuleFileNameEx()遍历获取64位进程的全路径失败,得到的路径都为空. 根据官方的说法: For the best results use t ...
- MVC中调用Public_Class时,VS2012老提示:当前上下文中不存在名称“Json”的解决方法
TMD,老TMD困扰我,每次新建MVC项目后就提示这个,原因在此: public class Public_Class <==此处应为:Public_Class : Controller { ...
- 配置caffe的python环境时make pycaffe提示fatal error: numpy/arrayobject.h No such file or directory解决方法
重装numpy: sudo pip uninstall numpy sudo pip install numpy 是没有用的... 解决的办法就是: sudo apt-get install pyth ...
随机推荐
- vue 消息订阅与发布
vue 消息订阅与发布 一.场景 vue中非父子组件之间通信时,使用vuex有时间会很麻烦,这时候可以通过bus总线来实现 消息的订阅与发布 二.实现方法 1.main.js //main.js Vu ...
- webpack系列-webpack内置插件ProvidePlugin的应用(定义全局变量,例如vue引入jquery全局使用)
vue+webpack使用ProvidePlugin插件引入jquery 先看一个实例,webpack+vue引入jquery并全局使用,这儿指通过配置,不是在静态页面使用script标签直接引入jq ...
- Parquet.Net: 将 Apache Parquet 移植到 .NET
Parquet.Net 是一个用于读取和写入 Apache Parquet 文件的纯 .NET 库,使用MIT协议开源,github仓库:https://github.com/aloneguid/pa ...
- 11-02 NOIP练习赛
11-02 NOIP练习赛 为什么休息的天还要打练习赛,这不公平!!!!!!!!!! oh no! 但是三道题确实挺简单,也少见的很有意思. [USACO23OPEN] Milk Sum S 题面翻译 ...
- U179915 关于分级火箭的一点理想化的计算
题目地址 本题是一道疯狂推式子的玄学复杂度sb题. 解题思路 1.数学部分 首先假定已经将火箭分成了 \(n+1\) 级,记使用了 \(n\) 个分级器.记各级的开始时间点为: \[0=t_0&l ...
- Nuxt.js 应用中的 app:beforeMount 钩子详解
title: Nuxt.js 应用中的 app:beforeMount 钩子详解 date: 2024/10/4 updated: 2024/10/4 author: cmdragon excerpt ...
- 2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为 k 特殊字符串。 其中,k 特殊字符串满足字符串中任意两个字符的出现频率
2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为 k 特殊字符串. 其中,k 特殊字符串满足字符串中任意两个字符的出现频率 ...
- Android Perfetto 系列 3:熟悉 Perfetto View
1. Perfetto View 界面 抓到 Perfetto Trace 之后,一般是在 ui.perfetto.dev 中打开(如果用官方提供的脚本,则会在抓去结束后自动在这个网站上打开,想看看怎 ...
- 利用3D标签,生成RLE标签编码,并保存到csv文件
# coding:utf-8from glob import globimport osimport SimpleITK as sitkfrom pathlib import Pathimport n ...
- 深度学习 - Torch-TensorRT 推理加速
深度学习 - Torch-TensorRT 推理加速 Torch-TensorRT 作为 TorchScript 的扩展. 它优化并执行兼容的子图,让 PyTorch 执行剩余的图. PyTorch ...