下载图像后访问图像时出现拒绝访问异常
Access Denied Exception caught when accessing image to show after download the image
我正在创建一个 windows 8.1 商店应用程序。此应用下载并向用户显示图像。
下载图片的代码:
HttpClient client = new HttpClient();
foreach (Doodle d in doodleslist)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, d.url.Replace("//", "http://"));
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
//write to file.
filename = d.name.Replace(@"/", "-");
var imgFile = await folder.CreateFileAsync(filename + ".jpg", CreationCollisionOption.ReplaceExisting);
var fs = await imgFile.OpenAsync(FileAccessMode.ReadWrite);
var outStream = fs.GetOutputStreamAt(0);
var dataWriter = new Windows.Storage.Streams.DataWriter(outStream);
dataWriter.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await dataWriter.StoreAsync();
dataWriter.DetachStream();
await fs.FlushAsync();
dataWriter.Dispose();
fs.Dispose();
}
显示下载图像的代码:
try
{
string month = datepickerDoodle.Date.Month.ToString();
string year = datepickerDoodle.Date.Year.ToString();
imgList.Items.Clear();
StorageFolder y =await KnownFolders.PicturesLibrary.GetFolderAsync(year);
StorageFolder m = await y.GetFolderAsync(month);
IReadOnlyList<StorageFile> fileList = await m.GetFilesAsync();
foreach (StorageFile file in fileList)
{
BitmapImage bm = new BitmapImage();
using (Windows.Storage.Streams.IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
bm.SetSource(fileStream);
Image img = new Image();
img.Source = bm;
img.Height = 120;
img.Width = 220;
img.Name = file.Path;
img.Stretch = Stretch.Fill;
img.HorizontalAlignment = HorizontalAlignment.Center;
img.VerticalAlignment = VerticalAlignment.Center;
TextBlock txtBlock = new TextBlock();
txtBlock.Width = 250;
txtBlock.TextTrimming = TextTrimming.WordEllipsis;
txtBlock.Text = file.Name.Replace(".jpg", null);
imgList.Items.Add(img);
imgList.Items.Add(txtBlock);
}
}
}
catch(Exception ex)
{
throw ex;
}
错误:
我在以下行中断了执行:
StorageFolder y =await KnownFolders.PicturesLibrary.GetFolderAsync(year);
错误信息:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
请任何人帮我解决这个问题。谢谢
我的问题解决了。我修改了我的下载图片代码如下:
HttpClient client = new HttpClient();
foreach (Doodle d in doodleslist)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, d.url.Replace("//", "http://"));
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
//write to file.
filename = d.name.Replace(@"/", "-");
var imgFile = await folder.CreateFileAsync(filename + ".jpg", CreationCollisionOption.ReplaceExisting);
var fs = await imgFile.OpenAsync(FileAccessMode.ReadWrite);
using (var outStream = fs.GetOutputStreamAt(0))
{
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outStream))
{
dataWriter.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await dataWriter.StoreAsync();
dataWriter.DetachStream();
await fs.FlushAsync();
dataWriter.Dispose();
fs.Dispose();
}
}
}
我正在创建一个 windows 8.1 商店应用程序。此应用下载并向用户显示图像。
下载图片的代码:
HttpClient client = new HttpClient();
foreach (Doodle d in doodleslist)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, d.url.Replace("//", "http://"));
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
//write to file.
filename = d.name.Replace(@"/", "-");
var imgFile = await folder.CreateFileAsync(filename + ".jpg", CreationCollisionOption.ReplaceExisting);
var fs = await imgFile.OpenAsync(FileAccessMode.ReadWrite);
var outStream = fs.GetOutputStreamAt(0);
var dataWriter = new Windows.Storage.Streams.DataWriter(outStream);
dataWriter.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await dataWriter.StoreAsync();
dataWriter.DetachStream();
await fs.FlushAsync();
dataWriter.Dispose();
fs.Dispose();
}
显示下载图像的代码:
try
{
string month = datepickerDoodle.Date.Month.ToString();
string year = datepickerDoodle.Date.Year.ToString();
imgList.Items.Clear();
StorageFolder y =await KnownFolders.PicturesLibrary.GetFolderAsync(year);
StorageFolder m = await y.GetFolderAsync(month);
IReadOnlyList<StorageFile> fileList = await m.GetFilesAsync();
foreach (StorageFile file in fileList)
{
BitmapImage bm = new BitmapImage();
using (Windows.Storage.Streams.IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
bm.SetSource(fileStream);
Image img = new Image();
img.Source = bm;
img.Height = 120;
img.Width = 220;
img.Name = file.Path;
img.Stretch = Stretch.Fill;
img.HorizontalAlignment = HorizontalAlignment.Center;
img.VerticalAlignment = VerticalAlignment.Center;
TextBlock txtBlock = new TextBlock();
txtBlock.Width = 250;
txtBlock.TextTrimming = TextTrimming.WordEllipsis;
txtBlock.Text = file.Name.Replace(".jpg", null);
imgList.Items.Add(img);
imgList.Items.Add(txtBlock);
}
}
}
catch(Exception ex)
{
throw ex;
}
错误: 我在以下行中断了执行:
StorageFolder y =await KnownFolders.PicturesLibrary.GetFolderAsync(year);
错误信息:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
请任何人帮我解决这个问题。谢谢
我的问题解决了。我修改了我的下载图片代码如下:
HttpClient client = new HttpClient();
foreach (Doodle d in doodleslist)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, d.url.Replace("//", "http://"));
HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
//write to file.
filename = d.name.Replace(@"/", "-");
var imgFile = await folder.CreateFileAsync(filename + ".jpg", CreationCollisionOption.ReplaceExisting);
var fs = await imgFile.OpenAsync(FileAccessMode.ReadWrite);
using (var outStream = fs.GetOutputStreamAt(0))
{
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outStream))
{
dataWriter.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await dataWriter.StoreAsync();
dataWriter.DetachStream();
await fs.FlushAsync();
dataWriter.Dispose();
fs.Dispose();
}
}
}