【问题标题】:Javascript write file without overwriteJavascript写入文件而不覆盖
【发布时间】:2013-01-23 22:38:44
【问题描述】:

我正在使用 XPCOM 读取/写入硬盘上的文件(因为 FF16、17、18 不再支持 Java,+ 我必须使用它)。我在我的 FireFox 扩展中使用它(我使用 iMacros)。在这个文档click我找到了这个例子。

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

【问题讨论】:

    标签: javascript firefox filestream xpcom imacros


    【解决方案1】:

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

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

    这会将PR_APPEND 标志添加到io 模式参数(它是0x102 用于PR_WRONLY)。

    【讨论】:

    • 工作顺利。将很快报告它是如何工作的。好的,它工作并写了但不完全。当我尝试创建已经存在的文件并且数据没有移动到新行中而是写入现有文本的同一行时,仍然出现错误。这可以通过 converterStream.writeString("\n"); 解决。在写正文之前。创建文件报错如何解决?
    猜你喜欢
    • 2023-03-28
    • 2011-05-08
    • 2012-06-18
    • 1970-01-01
    • 2020-03-28
    • 2012-04-15
    • 2015-01-19
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多