【发布时间】:2011-07-10 22:37:08
【问题描述】:
我正在尝试开发一个 Firefox 扩展。 刚开始我正在尝试写入文件,但我得到了这种非常奇怪和莫名其妙的行为。
此代码有效:
var file = showFilePicker(window,"saveTestCaseAs",
Components.interfaces.nsIFilePicker.modeSave,
Format.TEST_CASE_DIRECTORY_PREF,
function(fp) {return fp.file;});
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
foStream.init(file1, 0x02 | 0x08 | 0x20, 438, 0);
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.writeString("test string");
converter.close();
而这个没有:
var file1 = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file1.initWithPath("C:\Documents and Settings\XPMUser\Desktop\test.t");
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
// use 0x02 | 0x10 to open file for appending.
foStream.init(file1, 0x02 | 0x08 | 0x20, 438, 0);
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.writeString("test string");
converter.close(); // this closes foStream
错误信息是: 错误:组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [nsIFileOutputStream.init] 但是,此错误消息没有任何意义,因为这是所有错误中最常见的错误。 这很奇怪,因为唯一的区别是文件对象的初始化方式,但在这两种方式中,初始化参数(文件名、prems 等)和返回的对象的类型完全相同。
如果有人对此提供一些线索,将非常感激。
【问题讨论】:
-
请注意,您确实不应该在附加组件中进行同步磁盘 I/O。 developer.mozilla.org/en/Code_snippets/… 向您展示如何以更高效的方式执行此操作。
标签: javascript firefox-addon mozilla