【问题标题】:NetUtil.asyncCopy from one file to append to another in Firefox extensionNetUtil.async 从一个文件复制到 Firefox 扩展中的另一个文件
【发布时间】:2012-12-21 22:36:43
【问题描述】:

我正在尝试使用 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 都很陌生(尽管我是一个相当有经验的程序员)——所以我可能在做一些非常愚蠢的事情。如果我的整个方法有误,请告诉我 - 我原以为这种方法可以让我轻松异步地附加文件,但由于某种我不知道的原因,这可能是不可能的。

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 块会很有帮助。

标签: javascript asynchronous io firefox-addon


【解决方案1】:

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)....

【讨论】:

    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2018-09-28
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多