Javascript 在Mozilla Firefox扩展中写入文件-奇怪错误

Javascript 在Mozilla Firefox扩展中写入文件-奇怪错误,javascript,firefox-addon,mozilla,Javascript,Firefox Addon,Mozilla,我正在尝试开发一个firefox扩展。 刚开始的时候,我试着在文件中写,但我有一种非常奇怪和难以解释的行为 此代码适用于: var file = showFilePicker(window,"saveTestCaseAs", Components.interfaces.nsIFilePicker.modeSave, Format.TEST_CASE_DIRECT

我正在尝试开发一个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\U错误\U故障)[nsIFileOutputStream.init] 然而,这个错误消息并不意味着什么,因为这是所有错误中最常见的错误。 这是非常奇怪的,因为唯一的区别是文件对象的初始化方式,但在初始化参数(文件名、prems等)和返回对象的类型这两种方式上都完全相同


如果有人能提供一些线索,我将不胜感激。

@sdwilsh在上面提出了很好的观点。 不幸的是,问题要简单得多,也愚蠢得多。这是在单一的反斜杠和过于普遍的错误消息。 我提供的路径带有单个反斜杠,它们被解释为转义符号,实际上字符串不再是有效路径。用“\”替换“\”解决了这个问题。
所以这是一个非常简单的问题,但我们应该更加关注细节。

@sdwilsh在上面提出了非常好的观点。 不幸的是,问题要简单得多,也愚蠢得多。这是在单一的反斜杠和过于普遍的错误消息。 我提供的路径带有单个反斜杠,它们被解释为转义符号,实际上字符串不再是有效路径。用“\”替换“\”解决了这个问题。
所以这是一个非常简单的问题,但我们确实应该更加关注细节。

请注意,您不应该在附加组件中执行同步磁盘I/O。演示如何以更高性能的方式执行此操作。请注意,您不应该在附加组件中执行同步磁盘I/O。演示如何以更高效的方式执行此操作。