如何使用FileSystemObject在JavaScript中读取文件

Bry*_*ant 5 javascript file-io filesystemobject

我想用FileSystemObject读取一个文件.我的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Read json</title>
</head>

<body>
<script type="text/javascript">

function readFile(filename){
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var ForReading = 1;
    var f1 = fso.OpenTextFile(filename, ForReading);
    var text = f1.ReadAll();
    f1.close();
    return text;
}

myJSONText = "text.txt";
var myObject = readFile(myJSONText);//eval('(' + myJSONText + ')');

document.write(myObject.name);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Aar*_*mas 5

首先,让我重复上面的一些评论.我从未见过使用ActiveXObject客户端作为应该完成的事情.

现在,让我说我正在努力学习如何自己做这件事.以下是关于这个问题的一些想法(以及有用的链接,见底部).

根据MSDN 脚本诊所专栏中的 "关于文本文件的大量ADO"的总体布局是:

  1. 创建对象.
  2. 使用第一个对象创建另一个对象,该对象使用第一个对象的方法(例如获取文件).
  3. 对文件做一些事情.
  4. 关闭文件.

你是怎么开始的?根据IE开发中心(此处链接),在Javascript中使用ActiveXObject,如下所示:

newObj = new ActiveXObject(servername.typename[, location])
Run Code Online (Sandbox Code Playgroud)

当你fso在代码中声明时,你已经知道了.那个"servername"的东西,不是本地访问的文件吗?而不是你输入的"servername等" Scripting.FileSystemObject.如果主机PC上的HKEY_CLASSES_ROOT注册表项支持它,这实际上很好(参见上面的参考).

一旦ActiveXObject成功声明,并且浏览器允许它(仅限IE),并且最终用户同意弹出任何警告("此页面上的ActiveX控件可能不安全地与页面的其他部分交互. .."等),然后该对象允许您使用与该对象关联的任何方法.这就是Windows Scripting FileSystemObject的强大功能.

现在可以使用任何FileSystemObject(fso)方法,顾名思义,它意味着本地计算机上的文件(和目录)交互.不只是阅读,因为你的问题集中在,但写作删除也是如此.的方法和属性的完整列表,请访问MSDN 这里.使用后,使用该.close()方法关闭文件.

因此,出于显而易见的原因,这很危险.但起初我不明白的是,这些与文件系统的交互可能会无形地发生.很有可能无论你做什么,从阅读文件到删除目录树,都不会出现任何警告或命令提示,让你知道发生了什么,因为你的代码很少.

让我先评论一下上面的代码.将JSON与从FileSystemObject中提取的数据结合使用,提供了一种允许JavaScript交互的好方法(JSON .parse和.stringify立即浮出水面).有了这个,数据可以存储在本地,也许作为HTML5本地存储的替代品(参考这个SO线程,这个概念更加深入,以及我在这里提出的另一个SO问题).

以下是一些进一步阅读的链接:
IE开发中心,JavaScript对象,ActiveXObject
MSDN JScript Windows脚本(包括FileSystemObject方法等)
MSDN脚本编写诊所(较旧的文章,许多断开的链接,但这些东西很多很好的信息)

  • 关于相关性的评论.此答案适用于HTA文件和WScript文件以及IE. (2认同)