2013-01-16 4 views
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); 

오류 메시지는 다음과

조작이 유효 범위 밖의 데이터를 액세스하려고 시도 (Exception에서을 HRESULT : 0x8000000B)

확실하지 않은 이유는 무엇입니까? 어떤 생각?

+0

확인이 : http://stackoverflow.com/questions/9709961/socket-bug-in-windows-8-consumer-preview-visual-studio-11-developer-preview – Theraot

답변

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; 
} 

ToArray 함수의 네임 스페이스를 IBuffer에 포함시켜야합니다.

using System.Runtime.InteropServices.WindowsRuntime; 
관련 문제