2013-07-25 28 views
0

我正在嘗試將緩衝區數據寫入文件。我不斷地在回調函數中接收緩衝區數據。我需要讀取緩衝區並在收到文件時將其保存在文件中。這將重複,直到我得到完整的文件,我得到大小爲4k的數據塊。但是,下面的代碼會引發異常或輸出文件損壞。請讓我知道如何在winRT中做到這一點。如何在WinRT中通過塊寫入文件塊?

StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(strFileName, Windows.Storage.CreationCollisionOption.ReplaceExisting); 
public async void Receive(byte[] buffer) 
{ 
    using (var ostream = await file.OpenStreamForWriteAsync()) 
    { 
    await ostream.WriteAsync(buffer, 0, buffer.Length); 
    } 
} 

回答

0

問題出在Receive的簽名上。因爲它是void,所以不會等待,您可以在同一時間運行寫入進程(這可能是導致異常和/或數據損壞的原因)。

我建議改用此:

StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(strFileName, Windows.Storage.CreationCollisionOption.ReplaceExisting); 
public async Task Receive(byte[] buffer) 
{ 
    using (var ostream = await file.OpenStreamForWriteAsync()) 
    { 
    await ostream.WriteAsync(buffer, 0, buffer.Length); 
    } 
} 

而且隨着

await Receive(b); 
調用