我正在尝试将缓冲区数据写入文件。我连续在回调函数中接收缓冲区数据。我需要读取缓冲区并将其保存在收到的文件中。这将重复,直到我得到完整的文件,我得到4k大小的数据块。但是在代码下面会抛出异常或输出文件已损坏。请告诉我如何在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 :(得分: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);