【问题标题】:How to use FileSystemObject to read file in JavaScript如何使用 FileSystemObject 在 JavaScript 中读取文件
【发布时间】:2012-10-07 08:16:45
【问题描述】:

我想用 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 在客户端读取它)
  • 好的,感谢您的帮助。现在,让我试一试。再次感谢。

标签: javascript file-io filesystemobject


【解决方案1】:

首先,让我重复上面的一些 cmets。 我从来没有见过使用 ActiveXObject 客户端被称赞为应该做的事情。

现在,让我说我正在尝试自己学习如何做到这一点。以下是关于这个问题的一些想法(以及有用的链接,见底部)。

根据 MSDN scripting clinic column 上的“Much ADO about Text Files”,总体布局是:

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

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

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

当您在代码中声明 fso 时,您就知道了。这个“servername”的东西呢,不是本地访问的文件吗?您输入的不是“服务器名称等”Scripting.FileSystemObject。这实际上很好,如果主机 PC 上的 HKEY_CLASSES_ROOT 注册表项支持它(参见上面的参考)。

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

现在可以使用任何 FileSystemObject (fso) 方法,顾名思义,它意味着本地计算机上的文件(和目录)交互。不仅仅是阅读,因为您的问题是关注的,还有 writingdeleting。 MSDN here 提供了完整的方法和属性列表。使用后,使用.close()方法关闭文件。

因此,出于显而易见的原因,这很危险。但起初对我来说并不明显的是,这些与文件系统的交互可能无形发生。很有可能无论您做什么,从读取文件到删除目录树,都不会出现警告或命令提示,让您知道发生了什么,因为您只需几行代码。

最后让我评论一下上面的最后几段代码。将 JSON 与从 FileSystemObject 提取的数据结合使用提供了一种允许 JavaScript 交互的好方法(立即想到JSON .parse and .stringify)。有了这个,数据可以存储在本地,也许可以作为 HTML5 本地存储的替代方案(参考 this SO thread,它更深入地介绍了这个概念,以及我提出的关于这个 here 的另一个 SO 问题)。

这里有一些链接供进一步阅读:
IE Dev Center, JavaScript Objects, ActiveXObject
MSDN JScript Windows Scripting(包括 FileSystemObject 方法等)
MSDN Scripting Clinic(旧文章,许多断开的链接,但仍然有很多好的这东西的信息)

【讨论】:

  • 有关相关性的评论。此答案适用于 HTA 文件和 WScript 文件以及 IE。
  • 或 Windows 脚本宿主 (WSH)。
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2017-04-26
相关资源
最近更新 更多