다음 코드를 사용하여 이미지를 다운로드/저장하고 나중에 열기는했지만 나중에 OpenAsync에서 UnauthorizedAccessException을 throw하면 파일이 닫히지 않았지만 실제로는 IRandomAccessStream/DataWriter에있는 것처럼 보입니다. 처리되었습니다.StorageFile.OpenAsync의 UnauthorizedAccessException
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에 플러시합니다. 왜 그들은 단지 당신의 데이터를 버릴까요? – usr
fs.FlushAsync()는 비동기 플러시 작업이 완료되었는지 확인하기 만하면됩니다. – Yanzhi