我正在尝试开发一个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等)和返回对象的类型完全相同。
如果有人对此提出一些线索,我将非常感激。
答案 0 :(得分:1)
@sdwilsh在上面提出了非常好的观点。 Unforunataley问题更加简单,事件愚蠢。它是在单个反斜杠和太一般的错误消息。 我提供的路径是单个反斜杠,它被解释为转义符号,实际上字符串不再是有效路径。用'\'替换'\'解决了这个问题。 所以这是一个非常简单的问题,但人们应该更加关注细节。