我正在尝试使用 NetUtil.asyncCopy 将来自一个文件的数据附加到来自 Firefox 扩展的另一个文件的末尾。我基于https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O上的一些示例编写了此代码,特别是“将流复制到文件”示例。鉴于它在该页面上所说的内容,我的代码如下:
为要复制的文件和要附加到的文件创建 nsIFile 对象,并使用正确的路径初始化这些对象。
创建输出文件的输出流。
运行
NetUtil.asyncCopy
函数以在文件(我相信它的行为类似于 nsIInputStream)和输出流之间进行复制。
我将此代码运行为append_text_from_file("~/CopyFrom.txt", "~/AppendTo.txt");
,但没有任何内容被复制。和转储出现在控制台上,但不出现Appending Text
或转储。After ostream
Done
Error
有谁知道我在这里做错了什么?我对 Firefox 扩展和 javascript 都很陌生(尽管我是一个相当有经验的程序员)——所以我可能在做一些非常愚蠢的事情。如果我的整个方法是错误的,那么请告诉我 - 我原以为这种方法可以让我轻松地异步附加文件,但由于某种我不知道的原因,这可能是不可能的。
function append_text_from_file(from_filename, to_filename) {
var from_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
from_file.initWithPath(from_filename);
var to_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
to_file.initWithPath(to_filename);
dump("Appending text\n");
var ostream = FileUtils.openFileOutputStream(to_file, FileUtils.MODE_WRONLY | FileUtils.MODE_APPEND)
dump("After ostream\n");
NetUtil.asyncCopy(from_file, ostream, function(aResult) {
dump("Done\n");
if (!Components.isSuccessCode(aResult)) {
// an error occurred!
dump(aResult);
dump("Error!\n")
}
});
}