我有一个来自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)
不确定为什么会这样?有什么想法吗?
答案 0 :(得分: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;