4

我正在用 JavaScript 修改一些 Windows Store 开发,我似乎被困在如何从二进制文件中获取字节数组上。我在网上找到了几个示例,但它们似乎都只读取文本,而我的文件是图像。我正在像这样打开文件:

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是空的,所以我认为我使用不正确。我想我只是在这里忽略了一些简单的事情,但由于某种原因,我似乎无法找到将二进制文件读入字节数组的正确方法。有人可以提供第二双眼睛来帮助吗?

4

1 回答 1

6

发布问题后几乎立即想通了,但我想我会把答案留给后代......

我需要在第二个示例中以不同的方式声明数组:

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 没有达到标准,所以我想我不明白数组声明应该如何工作。(当我在浏览器中执行 vanilla JavaScript 时,我总是像最初那样声明空数组并附加到它们。)但这可以解决问题。

于 2012-12-22T16:06:07.670 回答