У меня есть следующий код, который извлекает динамическое изображение с веб-сервера в моем приложении Windows 8.CreateFileAsync UnauthorizedAccessException
private async Task httpFetcher()
{
HttpClient httpClient = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(
HttpMethod.Get, "http://www.reignofcomputer.com/imgdump/sample.png");
HttpResponseMessage response = await httpClient.SendAsync(request,
HttpCompletionOption.ResponseHeadersRead);
Uri imageUri;
BitmapImage image = null;
var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
"sample.png", CreationCollisionOption.ReplaceExisting);
var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0));
writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await writer.StoreAsync();
writer.DetachStream();
await fs.FlushAsync();
writer.Dispose();
if (Uri.TryCreate(imageFile.Path, UriKind.RelativeOrAbsolute, out imageUri))
{
image = new BitmapImage(imageUri);
}
image1.Source = image;
}
Это работает большую часть времени, но по какой-то причине, бывают случаи, когда я получаю
UnauthorizedAccessException (0x80070005, E_ACCESSDENIED), HResult -2147024891.
Поскольку ошибки являются случайными и обычно работают, я не уверен, где проблема.
Любая помощь будет оценена по достоинству.
Возможно, файл с таким же именем уже существует. 'CreateFileAsync' пытается заменить существующий файл, но он заблокирован другим процессом. – Leri
Хм, любая идея, как я могу проверить это, и если да, то как я могу заставить приложение ждать, пока файл не будет разблокирован, прежде чем продолжить? – ReignOfComputer
Вы можете создать ситуацию, описанную в моем комментарии самостоятельно. «Как я могу заставить приложение ждать, пока файл не будет разблокирован, прежде чем продолжить?» Это не очень хорошая идея. Вы никогда не знаете, что делает другой процесс. Для этого процесса может потребоваться несколько часов для _unlock_ файла. – Leri