Добавить данные в файл с расширением Firefox
Я пытаюсь создать расширение 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);
Какие-либо предложения?
1 ответ
Причина, по которой "безопасный" поток вывода файла является безопасным, заключается в том, что он записывает данные во временный файл и копирует их в фактический файл только при вызове stream.finish(). Таким образом, любые существующие данные будут потеряны. Если вы хотите добавить, вам придется использовать другой компонент (обычный старый "@mozilla.org/network/file-output-stream;1" должен работать нормально).