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