C# Загрузка и использование файла вызывает System.UnauthorizedAccessException
Я пытаюсь создать приложение, которое загружает файл, а затем редактирует этот файл.
У меня проблема в том, что, как только файл загружен, он, похоже, не отпускает этот файл, я могу загрузить файл в его локальное хранилище, я получил файл вручную из Iso и все в порядке. если я использую приложение для продолжения после загрузки файла, я получаю ошибку System.UnauthorizedAccessException, но если я закрываю и открываю приложение, а затем просто редактирую файл, сохраненный в iso, он работает, как я сказал, что он по-прежнему использует загруженный файл. файл.
public async void DownloadTrack(Uri SongUri)
{
var httpClient = new HttpClient();
var data = await httpClient.GetByteArrayAsync(SongUri);
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Test.mp3", CreationCollisionOption.ReplaceExisting);
var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite);
await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);
await targetStream.FlushAsync();
}
этот код прекрасно работает для загрузки mp3, так как я проверил загрузочный файл. Я видел, если примеры, где код заканчивается
targetStream.Close();
но это не дает мне, есть ли другой способ закрыть загрузку спасибо.
1 ответ
Вместо звонка Close()
или же Dispose()
Мне очень нравится использовать using
который делает работу автоматически. Итак, ваш метод может выглядеть так:
public async void DownloadTrack(Uri SongUri)
{
using (HttpClient httpClient = new HttpClient())
{
var data = await httpClient.GetByteArrayAsync(SongUri);
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Test.mp3", CreationCollisionOption.ReplaceExisting);
using (var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);
await targetStream.FlushAsync();
}
}
}