Netutil.Asynccopy从一个文件到Firefox扩展名附加到另一个文件



我正在尝试使用netutil.asynccopy从firefox扩展程序中将数据从一个文件附加到另一个文件的末尾。我在https://developer.mozilla.org/en-us/docs/code_snippets/file_i_o上基于许多示例基于此代码,尤其是"复制流到文件"示例。鉴于该页面上的内容,我的代码下面:

  1. 创建用于复制和文件的文件的NSifile对象,以将这些对象附加到并初始化这些对象。

  2. 为输出文件创建输出流。

  3. 运行NetUtil.asyncCopy函数以在文件之间复制(我相信它作为NSIInputStream)和输出流。

我以append_text_from_file("~/CopyFrom.txt", "~/AppendTo.txt");运行此代码,但没有任何复制。Appending TextAfter ostream转储出现在控制台上,而不是DoneError转储。

有人知道我在这里做错了吗?我对Firefox扩展和JavaScript都很陌生(尽管我是一个经验丰富的程序员) - 所以我可能会做一些非常愚蠢的事情。如果我的整个方法是错误的,请让我知道 - 我会认为这种方法可以使我轻松地添加一个文件,但由于某种原因我不知道。P>

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 textn");
        var ostream = FileUtils.openFileOutputStream(to_file, FileUtils.MODE_WRONLY | FileUtils.MODE_APPEND)
        dump("After ostreamn");
        NetUtil.asyncCopy(from_file, ostream, function(aResult) {
            dump("Donen");
            if (!Components.isSuccessCode(aResult)) {
                // an error occurred!
                dump(aResult);
                dump("Error!n")
            }
        });
    }

asynccopy()需要输入流而不是文件。您可以这样做:

    var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
    fstream.init(from_file, 0x01, 4, null);
    NetUtil.asyncCopy(fstream, ostream, function(aResult)....

最新更新