【发布时间】:2011-10-10 04:13:34
【问题描述】:
有没有人设法说服 XPCOM 对本地文件进行追加写入?下面的代码块在标志中使用 0x08(如果不存在则创建)可以正常工作。但是0x10,只是追加到现有文件的末尾,平面不起作用!特权位 0666 也没有。该文件始终创建为 0644。
Components.utils.import("resource://gre/modules/FileUtils.jsm");
var Cc=Components.classes;
var Ci=Components.interfaces;
function writeFile(fileName,data){
var file = FileUtils.getFile("Home", [fileName]);
var fileStream=FileUtils.openSafeFileOutputStream(file, 0x02 | 0x10 | 0x20, 0666, 0);
// ^^^^ does not work! 0x08 does.
fileStream.write(data,data.length);
FileUtils.closeSafeFileOutputStream(fileStream);
}
我尝试在不使用 FileUtils 的情况下打开流。像这样:
var fileStream = Cc["@mozilla.org/network/safe-file-output-stream;1"].
createInstance(Ci.nsIFileOutputStream);
fileStream.init(file, 0x02 | 0x10 | 0x20, 0666, 0);
结果完全相同。
我在随 XUL Explorer 1.0a1pre 分发的 XULRunner 1.9.2 下运行代码,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110421。
任何线索将不胜感激。
【问题讨论】:
-
我认为这个问题更加微妙。我查看了 file.js File.prototype.open ,它是模式标志的目的地。我在参数传递中看到至少 3 个错误! Open 似乎需要一个字符串,但是 switch 语句的情况是数字的,因此唯一的情况是默认的。我正在深入挖掘。
标签: file append xpcom xulrunner