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();
        }
    }
}
Другие вопросы по тегам