2014-05-16 103 views
0

我在我的Firefox擴展中有一個類似於數據集的哈希表,並且我願意將它保存在一個簡單的文本文件中。我一直在經歷很多示例代碼,但是這些代碼都不適合我。例如,12。我是在Firefox上開發擴展的初學者,在我看來,寫入文件的語法有點複雜。任何人都可以給我一個實例嗎?順便說一句,我正在使用unix。因爲我看到了寫入文件的例子,他們使用的是windows系統調用。Firefox擴展將數據寫入文件

回答

1

下面是一些示例代碼到一個名爲myfile.txt的文件寫入到你的Firefox配置文件目錄:

var txt = "my file contents"; 

    var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); 
    file.append("myfile.txt"); 
    var fs = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); 
    fs.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate 
    fs.write(txt, txt.length); 
    fs.close(); 

如果您使用的是火狐附加組件SDK(Jetpack的),你需要稍作修改。

var {Cc, Ci} = require("chrome"); 

    var txt = "my file contents"; 

    var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile); 
    file.append("myfile.txt"); 
    var fs = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream); 
    fs.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate 
    fs.write(txt, txt.length); 
    fs.close(); 
+0

它不是爲我工作。 :( – Ehsan

+0

你可以給一些代碼示例,看看是否有任何錯誤記錄在錯誤控制檯? – ekcr1

0

這是更簡單,直接的方式:

Components.utils.import("resource://gre/modules/osfile.jsm"); 

// Saving the pointed filename into your Firefox profile 
let whereToSave = OS.Path.join(OS.Constants.Path.profileDir, "YOUR-FILENAME.txt"); 

// Convert your "hash table" to a Typed Array[1] 
let dataToSave = hashTableAsArrayBufferView; 

// Check MDN[2] for writeAtomic() details 
OS.File.writeAtomic(whereToSave, dataToSave).then(function(aResult) { 
    // Write operation finished 
    ... 
}, Components.utils.reportError); 

[1]:https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView

[2]:https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread#OS.File.writeAtomic%28%29