【发布时间】:2012-06-23 08:52:06
【问题描述】:
我使用以下代码下载/保存图像并稍后打开它,但是在以后的OpenAsync中,它抛出了UnauthorizedAccessException,看起来文件没有关闭,但实际上IRandomAccessStream/DataWriter已被释放。
HttpClient httpClient = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://www.silverlightshow.net/Storage/Users/nikolayraychev/Perspective_Transforms_4.gif");
HttpResponseMessage response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
//Write Image File
StorageFile imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.gif", CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite))
{
using (DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0)))
{
writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await writer.StoreAsync();
writer.DetachStream();
await fs.FlushAsync();
}
}
StorageFile imageFile1 = await ApplicationData.Current.LocalFolder.GetFileAsync("test.gif");
//Exception is throwed here
using (IRandomAccessStream stream = await imageFile1.OpenAsync(FileAccessMode.Read))
{
BitmapImage img = new BitmapImage();
img.SetSource(stream);
}
【问题讨论】:
-
您不需要刷新任何写入器或流。它们在 Dispose 上冲洗。为什么他们会丢弃你的数据?
-
await fs.FlushAsync() 只是确保异步刷新操作完成。
标签: c# io windows-runtime file-access