2012-12-21 57 views
1

我想使用NetUtil.asyncCopy从一个文件追加到Firefox扩展的另一个文件的末尾。我在https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O的许多示例中都基于此代码,特别是“将流复制到文件”示例。鉴于它说该网页上,下面我的代码:NetUtil.asyncCopy从一个文件追加到另一个Firefox扩展

  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") 
      } 
     }); 
    } 
+0

Somw异常被抛出,'try ... catch'块会非常有帮助。 – paa

回答

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