我想使用NetUtil.asyncCopy从一个文件追加到Firefox扩展的另一个文件的末尾。我在https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O的许多示例中都基于此代码,特别是“将流复制到文件”示例。鉴于它说该网页上,下面我的代码:NetUtil.asyncCopy从一个文件追加到另一个Firefox扩展
创建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")
}
});
}
Somw异常被抛出,'try ... catch'块会非常有帮助。 – paa