如何在WinRT中按块写入文件块?

时间:2013-07-25 10:25:22

标签: c# windows-8 windows-runtime file-transfer

我正在尝试将缓冲区数据写入文件。我连续在回调函数中接收缓冲区数据。我需要读取缓冲区并将其保存在收到的文件中。这将重复,直到我得到完整的文件,我得到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);
  }
}

1 个答案:

答案 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);