gpt4 book ai didi

file - 将数据附加到带有 Firefox 扩展名的文件中

转载 作者:行者123 更新时间:2023-12-04 06:18:38 24 4
gpt4 key购买 nike

我正在尝试构建一个 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);

有什么建议?

最佳答案

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

关于file - 将数据附加到带有 Firefox 扩展名的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com