Firefox扩展:使用OS.File.jsm进行文件读/写

时间:2014-06-24 04:43:54

标签: javascript firefox firefox-addon

来自File I/O snippets

  

使用OS.File   优于本文中的示例。只能使用   如果您无法使用OS.File,则可以使用这些旧版接口。

现在我有几个问题......

来自OS.File for the main thread

  

示例:以文本形式阅读文件内容

     

此示例需要Firefox 18或更新版本。   ......

     

示例:将字符串写入文件

     

这些示例需要Firefox 19或更新版本。

那就是说FF 18只支持阅读而FF19支持阅读和写作吗?

此外,来自Recent changes to OS.File

  

要编写字符串,您现在可以直接将字符串传递给   writeAtomic:

     

OS.File.writeAtomic(path, "Here is a string", { encoding: "utf-8"})

     

同样,您现在可以从read读取字符串:

     

OS.File.read(path, { encoding: "utf-8" } ); //解析为字符串。

     

这样做至少与调用TextEncoder / TextDecoder一样快   你自己(见下文)。

我已经在FF30上面进行了测试(没有TextEncoder / TextDecoder)并且它工作正常......但它可以使用哪些版本?

最后,NetUtil.jsm/FileUtils会在使用FileUtils.openSafeFileOutputStream(file)时创建一个文件。

文件创建如何在OS.File上运行?它是自动创建的吗?是否需要if(!OS.File.exists(path)),然后如何创建一个?

推荐方法的文档非常有限,很难得到示例。

1 个答案:

答案 0 :(得分:4)

  

那就是说FF 18只支持阅读而FF19支持阅读和写作吗?

是和否。 Firefox 18支持写入某些扩展IIRC,但API在19中更改,因此您所指的示例仅适用于19。 并不是说它真的应该关注你... Firefox 18和19很长生命终结因此不支持已知的安全问题,用户应真正升级ASAP 。< / p>

  

我已在FF30上面测试过(没有TextEncoder / TextDecoder)并且它工作正常......但问题是它可以使用哪些版本?

自Firefox 22起,writeAtomic选项encoding可用read,而自Firefox 30开始,encoding标记为OS.File.writeAtomic

  

文件创建如何在OS.file上运行?它是自动创建的吗?它是否需要if(!OS.File.exists(path))然后如何创建一个?

如果文件尚未存在,

OS.File.open将创建该文件。同样,写入模式下的existing: true也会创建一个文件,除非您在选项中指定OS.File.read("/somefile").then(function(data) { // do something with the retrieved data; }, function(ex) { if (ex.becauseNoSuchFile) { // File does not exist); } else { // Some other error } });

您无法从不存在的文件中读取。将引发错误。

try {
  var data = yield OS.File.read("/somefile");
}
catch (ex if ex.becauseNoSuchFile) {
  // File does not exist.
}
catch (ex) {
  // Some other error
}

Task.jsm - 样式:

{{1}}