0

我有一个从 HTTP 获得的流。

我想保存收到的每个数据包并将其附加到文件的末尾:“myData.dat”

我在下面编写了代码,每次数据包到达时它都会运行。

private async void FrameReady( object sender, IBuffer DataBuffer )
{
    InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();
    await stream.WriteAsync( DataBuffer );
    stream.Seek( 0 );
    using ( Stream file = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync( "myData.dat", CreationCollisionOption.OpenIfExists ) )
    {
        file.Seek( 0, SeekOrigin.End );
        var dataReader = new Windows.Storage.Streams.DataReader( stream );
        byte [] buffer = new byte [DataBuffer.Length];
        dataReader.ReadBytes( buffer );
        await file.WriteAsync( buffer, 0, (int)DataBuffer.Length );
    }
}

但是,在运行代码时,它在这一行失败:

dataReader.ReadBytes( buffer );

错误信息是:

该操作试图访问有效范围之外的数据(HRESULT 异常:0x8000000B)

不知道为什么会这样?任何想法?

4

1 回答 1

1

我在 ReadBytes 函数中遇到了类似的问题。

我正在使用以下解决方法,这可能对某人有所帮助。

private async Task<uint> ProcessBulkIn(Task<DataReader> task)
{
    byte[] rawData;
    DataReader b = await task;
    uint length = b.UnconsumedBufferLength;
    IBuffer iBuf = b.ReadBuffer(length);
    rawData = iBuf.ToArray();
    return length;
}

您需要在 IBuffer 上包含 ToArray 函数的命名空间。

using System.Runtime.InteropServices.WindowsRuntime;
于 2013-08-21T13:42:24.133 回答