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. ArgoWorkflow教程(四)---Workflow & 日志归档

    上一篇我们分析了argo-workflow 中的 artifact,包括 artifact-repository 配置以及 Workflow 中如何使用 artifact.本篇主要分析流水线 GC 以 ...

  2. 如何使用Java在Word中插入表格

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,有时候需要操作word或者excel.这里面比较常用的框架是POI,我之前用过POI来读写excel,也有用过alibaba easy excel ...

  3. 暑假集训CSP提高模拟4

    A.White and Black 暴力的 \(O(nq)\) 做法比较显然,因为对于根节点来说,只有它自己可以改变自己的颜色,因此如果它是黑色则一定需要更改自己,同时把更改传下去(应该没有那种每次真 ...

  4. 下载 Youtube 上的视频的方法

    事件起因: 某项目组同事需要下载 Youtube 上的视频作为参考视频 解决办法: https://www.converto.io/ -= 实测有效 =-  我个人一直在用该网站可以下载,非常好用,下 ...

  5. 《Vue.js 设计与实现》读书笔记 - 第5章、非原始值的响应式方案

    第5章.非原始值的响应式方案 5.1 理解 Proxy 和 Reflect Proxy Proxy 只能代理对象,不能代理非对象原始值,比如字符串. Proxy 会拦截对对象的基本语义,并重新定义对象 ...

  6. XYD1006CSPS

    T1 密钥 [关键结论,模拟,枚举] Description 给定两个长度为 \(n\) 的 \(01\) 序列 \(a\),\(b\),每个位置都有一个权值 \(c\), 每次操作可以将 \(a\) ...

  7. USB协议详解第10讲(USB描述符-报告描述符)

    1.报告描述符的概念和作用 开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构. 首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送 ...

  8. Kernel调试追踪技术之 Kprobe on ARM64

    kprobe是什么? kprobe 是一种动态调试机制,用于debugging,动态跟踪,性能分析,动态修改内核行为等,2004年由IBM发布,是名为Dprobes工具集的底层实现机制[1][2],2 ...

  9. 【PyTorch】state_dict详解

    这篇博客来自csdn,完全用于学习. Introduce 在pytorch中,torch.nn.Module模块中的state_dict变量存放训练过程中需要学习的权重和偏执系数,state_dict ...

  10. docker发布ASPNETCore项目 yum

    docker手动发布ASP.NET Core7 一.环境准备环节 1.准备Linux系统 Linux系统-CentOS7---基于虚拟机来安装 IP:192.168.1.97 2.安装docker环境 ...