簡體   English   中英

在 Mozilla Firefox 擴展中寫入文件 - 奇怪的錯誤

[英]Writing to file in Mozilla Firefox extension - strange error

我正在嘗試開發 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] 但是此錯誤消息沒有任何意義,因為這是所有錯誤中最常見的錯誤。 這很奇怪,因為唯一的區別是文件 object 的初始化方式,但在這兩種方式中,初始化參數(文件名、prems 等)和返回的對象的類型完全相同。

如果有人對此提供一些線索,將不勝感激。

@sdwilsh 在上面提出了很好的觀點。 不幸的是,這個問題要簡單得多,而且很愚蠢。 它位於單個反斜杠和過於籠統的錯誤消息中。 我提供的路徑帶有單個反斜杠,它被解釋為轉義符號,實際上該字符串不再是有效路徑。 用 '\' 替換 '\' 解決了這個問題。 所以這是一個非常簡單的問題,但真的應該更多地關注細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM