【问题标题】:Append data to file with firefox extension将数据附加到具有 Firefox 扩展名的文件
【发布时间】:2011-10-17 01:29:30
【问题描述】:

我正在尝试构建一个 firefox 扩展,并且我想定期在文件中写入内容。所以我想要一个在其中附加新字符串的文件。以下代码写入文件,但最后文件只包含我写的最后一个字符串,而不是前一个。

你能帮帮我吗?

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);

有什么建议吗?

【问题讨论】:

    标签: file firefox firefox-addon appendfile


    【解决方案1】:

    “安全”文件输出流之所以安全,是因为它会将数据写入临时文件,并且仅在您调用 stream.finish() 时将其复制到实际文件中。因此,任何现有数据都会丢失。如果要追加,则必须使用不同的组件(普通的旧“@mozilla.org/network/file-output-stream;1”应该可以正常工作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 2011-06-07
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多