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对象问题的解决方法的更多相关文章

  1. 关于vue-cli3打包时遇到Cannot assign to read only property 'exports' of object '#<Object>'问题的解决方法。

    vue-cli3打包时遇到Cannot assign to read only property 'exports' of object '#<Object>'问题的解决方法. 大致是说, ...

  2. 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 ...

  3. Python和Ruby抓取网页时的中文乱码问题(在Eclipse和Apatana Studio下均是这种解决方法

    Python抓取中文网页乱码 :Eclipse+pydev2.2+python2.7  :Apatana Studio3+ pydev2.2+python2.7      run时设置 run--&g ...

  4. 使用MSBUILD 构建时出错 error MSB3086: Task could not find "sgen.exe" using the SdkToolsPath的解决方法

    如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...

  5. VMware安装时Error 1324. The path My Documents contains a invalid character的原因和解决方法

    终于找到了自己想要的答案,顶顶,吼吼~ 我今天安装VMware Workstation时,总是提示我Error 1324. The path My Documents contains a inval ...

  6. 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 ...

  7. Tomcat的webapps目录下的classes文件夹下缺失编译好的.class文件原因及其解决方法

    右键,选择BuildPath: 可以编辑Output folder,指定编译后的文件的存放目录,一般是target/classes目录

  8. GetModuleFileNameEx遍历获取64bit程序路径失败的一种解决方法(Win7-64-bit)

    问题: 32位程序在64位系统上调用GetModuleFileNameEx()遍历获取64位进程的全路径失败,得到的路径都为空. 根据官方的说法: For the best results use t ...

  9. MVC中调用Public_Class时,VS2012老提示:当前上下文中不存在名称“Json”的解决方法

    TMD,老TMD困扰我,每次新建MVC项目后就提示这个,原因在此: public class Public_Class   <==此处应为:Public_Class : Controller { ...

  10. 配置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 ...

随机推荐

  1. DOM – IntersectionObserver

    介绍 IntersectionObserver 的作用是监听某个元素是否出现在框内 (比如 viewport). 它可以实现 lazy load image, 一开始图片是没有加载的, 当图片出现在 ...

  2. CSS – background and styling img

    前言 之前写过一些: W3Schools 学习笔记 (2) – CSS Image Sprites W3Schools 学习笔记 (3) – CSS Styling Images & CSS ...

  3. DLA:动态层级注意力架构,实现特征图的持续动态刷新与交互 | IJCAI'24

    论文深入探讨了层级注意力与一般注意力机制之间的区别,并指出现有的层级注意力方法是在静态特征图上实现层间交互的.这些静态层级注意力方法限制了层间上下文特征提取的能力.为了恢复注意力机制的动态上下文表示能 ...

  4. C++ STL queue容器——队列

    queue容器 基本概念 queue是一种**先进先出的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素. queue容器没有迭代器,所有元素进出都必须符合"先进先 ...

  5. manim边学边做--空心多边形

    空心的多边形Cutout是一种比较特殊的多边形,主要用于解决与形状.大小.位置等相关的数学问题. Cutout多边形可以定义物体表面的空洞或凹陷部分,从而更准确地模拟现实世界中的复杂形状. 比如,在P ...

  6. 关于建表字段是否该使用not null这个问题你怎么看?

    大家好,我是 V 哥,在数据库设计中,是否使用 NOT NULL 是一个非常重要的决策,直接影响数据完整性.查询性能以及业务逻辑的复杂度.使用 NOT NULL 的关键在于理解业务需求和具体场景. 下 ...

  7. Sql介绍 与 Sql基础查询

    Sql介绍 与 Sql基础查询 SQL SQL也称为结构化查询语言(Structure Query Language),是一种用于管理和操作关系型数据库的标准化计算机语言,SQL语言广泛应用于各种关系 ...

  8. volatile关键字最全原理剖析

    介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性. volatile的作用: 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变 ...

  9. argmax经过sigmoid和不经过sigmoid区别

    起因 今天和同组讨论了一下网络输出时,在torch.argmax之前经过torch.sigmoid和不经过sigmoid的区别. 主要起因是实验结果图像不同 图1 不经过sigmoid 图2 经过si ...

  10. 嘟嘟牛在线登陆加密分析-RPC调用

    加密参数 JADX反编译后搜索代码 user/login 基本可以确定就是从这里发起网络请求 跟进 addRequestMap 方法分析 这一看逻辑就清晰了 先添加一个时间戳,在对sign进行加密后在 ...