WinJS中的文件到字节数组

时间:2012-12-22 15:53:38

标签: binaryfiles windows-store-apps winjs

我正在修补JavaScript中的一些Windows应用商店开发,我似乎陷入了如何从二进制文件中获取字节数组的问题。我在网上找到了几个例子,但它们似乎只是用文本阅读而我的文件是图像。我正在打开这样的文件:

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

1 个答案:

答案 0 :(得分:5)

在发布问题后几乎立即弄明白,但我想我会留下答案给后人......

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

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时,我总是像我最初那样声明空数组并附加到它们。)但这就是诀窍。