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

8
我想使用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>

噫...好的,首先那段代码看起来没问题,只要你用IE浏览器,所以我不确定哪里出了问题。___但是不要这样做!___你试图从客户端浏览器读取本地文件系统,而几乎所有浏览器都不允许这样做。即使IE(仅适用于旧版本?)像这样允许,它仍然是一个安全问题。如果您想读取文件,应提示用户上传文件,然后在服务器上读取它(或使用新的HTML5文件API在客户端上读取它)。 - user578895
好的,谢谢你的帮助。现在让我试试看。再次非常感谢。 - Bryant
1个回答

6

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

现在,让我说我正在尝试学习如何自己做这件事。以下是对这个问题的一些想法(和有用的链接,请参见底部)。

一般的布局,根据MSDN的“关于文本文件的Much ADO” scripting clinic column,是:

  1. 创建对象。
  2. 使用第一个对象创建另一个对象,该对象使用第一个对象的方法(例如获取文件)。
  3. 对文件进行操作。
  4. 关闭文件。

怎么开始呢?根据IE Dev Center(链接here),在Javascript中使用ActiveXObject如下:

newObj = new ActiveXObject(servername.typename[, location])

当你在代码中声明fso时,就拥有了它。那么"servername"是什么意思呢?文件不是在本地访问吗?你可以使用Scripting.FileSystemObject代替"servername等"。如果主机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 Scripting Clinic(旧文章,许多链接已失效,但仍有很多关于这方面的好信息)


2
关于相关性的评论。此答案适用于HTA文件、WScript文件以及IE。 - Jefferey Cave
或 Windows 脚本宿主 (WSH)。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接