2011-07-31 14 views
2

ファイアウォクス拡張機能をビルドしようとしていて、ファイルに定期的に書きたいと思っています。だから私は私が新しい文字列を追加するファイルが欲しい。次のコードはファイルを書き込みますが、最後には最後に書き込まれた文字列だけが含まれています。ファイアウォール拡張子を持つファイルにデータを追加する

私を助けることができますか?

mydir=null; 
mylog=null; 
mystream=null; 

function initFolder() { 
var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"] 
      .getService(Components.interfaces.nsIProperties); 
mydir = dirSvc.get("ProfD", Components.interfaces.nsILocalFile); 
mydir.append("mylogFolder"); 
if (!mydir.exists()) 
    mydir.create(mydir.DIRECTORY_TYPE, 0700); 

var fileName = "logFile.txt"; 
mylog = mydir.clone(); 
mylog.append(fileName); 
mylog.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0777); 
} 

function mywriteFile(aData) { 
    // init stream 
    mystream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"]. 
      createInstance(Components.interfaces.nsIFileOutputStream); 
    try { 
    mystream.init(mylog, 0x02 | 0x10, 0777, 0); //these flags to append file? 
    } catch (e) { 
    dump("exception: " + e + "\n"); 
    } 

    // convert to UTF-8 
    var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. 
       createInstance(Components.interfaces.nsIScriptableUnicodeConverter); 
    converter.charset = "UTF-8"; 
    var convertedData = converter.ConvertFromUnicode(aData); 
    convertedData += converter.Finish(); 
    try { 
    mystream.write(convertedData, convertedData.length); 
    } catch (e) { 
dump("exception: " + e + "\n"); 
    } 
} 

function close() { 
    if (mystream instanceof Components.interfaces.nsISafeOutputStream) { 
    mystream.finish(); 
    } else { 
    mystream.close(); 
    } 
} 

window.addEventListener("load", function(){ initFolder(); }, false); 
window.addEventListener("unload", function(){close(); }, false); 

答えて

3

「安全な」ファイル出力ストリームが安全である理由は、データを一時ファイルに書き込んで、stream.finish()を呼び出すときにそのファイルを実際のファイルにコピーすることだけです。したがって、既存のデータはすべて失われます。追加したい場合は、別のコンポーネント(普通の "@ mozilla.org/network/file-output-stream; 1"は正常に動作するはずです)を使用する必要があります。

関連する問題