1
我想开发一个Firefox扩展。 刚开始时我试图写入文件,但我得到这个非常奇怪和莫名其妙的行为。在Mozilla 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] 但是,这个错误信息并不意味着什么,因为这是所有的最通用的错误。 这是非常奇怪的,因为唯一的区别是文件对象是未知的,但是在两种方式中,初始化参数(文件名,前缀等)和返回的对象类型完全相同。
如果有人提供一些线索,这将是非常gratefull。
请注意,您确实不应该在您的加载项中执行同步磁盘I/O。 https://developer.mozilla.org/en/Code_snippets/File_I%2f%2fO#Write_a_string向您展示了如何以更高效的方式实现这一点。 – sdwilsh 2011-04-27 17:29:10