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