不覆盖的 Javascript 写入文件



我正在使用XPCOM在我的硬盘上读/写文件(因为FF16,17,18,+上不再支持Java,我必须使用它)。我在我的FireFox扩展中使用它(我使用iMacros)。在此文档中,单击"我找到了此示例"。

var string = 'u5909u63dbu30c6u30b9u30c8';
file.initWithPath('C:\temp\temp.txt');
file.create(file.NORMAL_FILE_TYPE, 0666);
var charset = 'EUC-JP';
var fileStream = Components
.classes['@mozilla.org/network/file-output-stream;1']
.createInstance(Components.interfaces.nsIFileOutputStream);
fileStream.init(file, 2, 0x200, false);
var converterStream = Components
.classes['@mozilla.org/intl/converter-output-stream;1']
.createInstance(Components.interfaces.nsIConverterOutputStream);
converterStream.init(fileStream, charset, string.length,
Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
converterStream.writeString(string);
converterStream.close();
fileStream.close();

因此,此代码执行以下操作。如果文件不存在,它会创建它并将数据保存在其中。但是,如果文件确实存在,它将返回错误。如果我评论部分代码(和文件存在),它只会覆盖旧数据并放置新数据。

我需要这段代码来创建文件,如果它存在,只需继续前进而不会出错,并将数据保存在新行中而不会覆盖。

喜欢这个。

以前:

data11, data12, data13
data21, data22, data23

后:

data11, data12, data13
data21, data22, data23
data31, data32, data33
data41, data42, data43

尝试在初始化输出流(而不是 2)时传递 18 作为第二个参数。

fileStream.init(file, 18, 0x200, false);

这会将 PR_APPEND 标志添加到 io mode 参数中(它是 0x10 ;2用于 PR_WRONLY )。

最新更新