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

时间:2011-04-27 14:06:32

标签: javascript firefox-addon 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] 但是,此错误消息并不意味着什么,因为这是所有内容中最常见的错误。 这是非常奇怪的,因为唯一的区别是文件对象被初始化的方式,但两种方式启动参数(文件名,prems等)和返回对象的类型完全相同。

如果有人对此提出一些线索,我将非常感激。

1 个答案:

答案 0 :(得分:1)

@sdwilsh在上面提出了非常好的观点。 Unforunataley问题更加简单,事件愚蠢。它是在单个反斜杠和太一般的错误消息。 我提供的路径是单个反斜杠,它被解释为转义符号,实际上字符串不再是有效路径。用'\'替换'\'解决了这个问题。 所以这是一个非常简单的问题,但人们应该更加关注细节。