2013-01-23 59 views
1

我使用XPCOM在我的硬盘上读取/写入文件(因为Java不再支持FF16,17,18 +我必须使用它)。我在我的FireFox扩展中使用它(我使用iMacros)。在这个文件click我发现这个例子。Javascript写入文件没有被覆盖

var string = '\u5909\u63db\u30c6\u30b9\u30c8'; 
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 

回答

1

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

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

,其将所述PR_APPEND标志到IO模式参数(这是0x10;所述2PR_WRONLY)。

+0

好的工作。将很快报告它是如何工作的。好吧,它的工作和写作,但不完全。当我尝试创建已经存在的文件时,仍然出现错误,并且数据没有在新行中移动,而是写入现有文本的同一行中。这可以通过converterStream.writeString(“\ n”)来解决。在写正文之前。如何解决创建文件的错误? – macroscripts