2011-06-20 53 views
0

我開發了一個firefox擴展,收集一些數據並將它們保存到桌面上的文件中。Firefox 4擴展file.create唯一例外:NS_ERROR_FAILURE

它在Mac OS上運行良好,但是在Windows 7上,創建文件時會引發錯誤。 例外:

uncaught exception:[Exception... "Component returned failure code:0x80004005(NS_ERROR_FAILURE)[nsIFile.createUnique]" nsresult:"0x80004005 (NS_ERROR_FAILURE)" location: "JS frame::chrome://klmlogger/content/record.js :: <TOP_LEVEL> :: line 59" data: no] 

代碼是在這裏:

var file = Components.classes["@mozilla.org/file/directory_service;1"] 
         .getService(Components.interfaces.nsIProperties) 
         .get("Desk", Components.interfaces.nsIFile); 
    file.append("samplefile.txt"); 
    file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666); // Line 59 

如果我刪除第59行(和它仍然在Mac OS),錯誤變成了:

Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIFileOutputStream.init] 
resource://gre/modules/FileUtils.jsm   Line: 86 

錯誤發生在這裏:

if (modeFlags === undefined) 
    modeFlags = this.MODE_WRONLY | this.MODE_CREATE | this.MODE_TRUNCATE; 
fos.init(file, modeFlags, this.PERMS_FILE, 0);  // Line 86 
return fos; 

回答

0

你的代碼對我來說是正確的,這裏沒有問題。看起來Firefox由於某些原因無法創建文件,並且無法識別返回的Windows錯誤代碼(它只知道在http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsLocalFileWin.cpp#240下列出的錯誤代碼)。如果您嘗試手動創建文件可能是最好的,例如用記事本 - 我想你會得到一個錯誤,但有更多的信息。

+0

如果文件已經存在,代碼就可以正常工作。但在我的情況下,我必須動態創建文件。並沒有更多有用的錯誤信息,我可以得到。 – Sheng