こんにちは:私は最初にfirefox拡張機能を書いています(私の最初のこと)、イメージURLをバイト配列に読み込み、そのバイナリ情報をファイルに書き出します。私はthis exampleを使っていますが、それは動作しているかのように見えますが、文字変換が行われているかのようにファイルが正しくありません。次のようにjavacriptからのバイナリデータの書き込み(Firefoxプラグイン)
私のバージョンは次のとおりです。
testWriteBinaryFile : function (dir, filename, data) {
var aFile = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
aFile.initWithPath("/home/mike/mypicture.gif");
aFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600);
Firebug.Console.log("Binary writing: file set up");
var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].
createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(aFile, 0x04 | 0x08 | 0x20, 0600, 0); // readwrite, create, truncate
Firebug.Console.log("Binary writing: stream set up");
Firebug.Console.log("Data length: " + data.length);
Firebug.Console.log("Data byte 0: " + data[0].toString(16));
Firebug.Console.log("Data byte 1: " + data[1].toString(16));
Firebug.Console.log("Data byte 2: " + data[2].toString(16));
Firebug.Console.log("Data byte 3: " + data[3].toString(16));
Firebug.Console.log("Data byte 4: " + data[4].toString(16));
stream.write(data, data.length);
Firebug.Console.log("Binary writing: stream written")
if (stream instanceof Components.interfaces.nsISafeOutputStream) {
stream.finish();
} else {
stream.close();
}
Firebug.Console.log("Binary writing: done.");
}
私はデータバッファ自体は最初の数バイトをプリントアウトすることでOKですが、ファイルがディスク上に一度完全に異なっている知っています。バイナリファイルを書き出すためのアイディアや他の方法
これは同期書き込みですが、ファイルは小さく(20Kb)ですが、これが唯一の例です。私はこれを修正することができれば、私は延長が完了しました!すべてのヘルプが感謝しています。
最初の解決策が問題なく動作します。私は、何らかの変革が必要であることに感心しました。あなたの助けをありがとう、花の束が途中にあります! (私は実際に2番目のソリューションを最初に試しましたが、writeByteArrayに固執してしまいました。もう一度試してみます) – djnz0feh