4

私はJavaScriptでWindowsStoreの開発をいじっていますが、バイナリファイルからバイト配列を取得する方法に固執しているようです。オンラインでいくつかの例を見つけましたが、私のファイルは画像であるのに対し、それらはすべてテキストでしか読めないようです。私はこのようにファイルを開いています:

Windows.Storage.FileIO.readBufferAsync(photos[currentIndex]).done(function (buffer) {

    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
    var fileContent = dataReader.readString(buffer.length);
    dataReader.close();

    // do something with fileContent

});

ファイルはどこphotos[currentIndex]にありますか(からロードされますgetFilesAsync())。もちろん、この場合のエラーは、readStringバイナリデータで失敗することです。「文字」を文字列にマップすることはできません。私もこれを試しました:

Windows.Storage.FileIO.readBufferAsync(photos[currentIndex]).done(function (buffer) {

    var bytes = [];
    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
    dataReader.readBytes(bytes);
    dataReader.close();

    // do something with bytes

});

しかしbytes、空なので、これを間違って使用していると思います。ここでは単純なものを見落としていると思いますが、何らかの理由で、バイナリファイルをバイト配列に読み込む正しい方法が見つからないようです。誰かが助けるために2番目の目を提供できますか?

4

1 に答える 1

6

質問を投稿した直後にそれを理解しました、しかし私は後世のためにここに答えを残すと思います...

2番目の例では、配列を別の方法で宣言する必要がありました。

Windows.Storage.FileIO.readBufferAsync(photos[currentIndex]).done(function (buffer) {

    var bytes = new Uint8Array(buffer.length);
    var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
    dataReader.readBytes(bytes);
    dataReader.close();

    // do something with bytes

});

私のJavaScriptは標準に達していません。そのため、配列宣言がどのように機能するのか理解できなかったと思います。(ブラウザーでバニラJavaScriptを実行するときは、最初に行ったように常に空の配列を宣言して追加します。)しかし、これでうまくいきます。

于 2012-12-22T16:06:07.670 に答える