c# windows-phone-8.1 windows-8.1

La descarga de C#y el uso de archivos causan System.UnauthorizedAccessException



windows-phone-8.1 windows-8.1 (1)

Intento crear una aplicación que descargue un archivo y luego edite este archivo.

El problema que tengo es que una vez que el archivo se descarga no parece soltar ese archivo, puedo descargar el archivo a su almacenamiento local, he obtenido el archivo manualmente de la ISO y está bien. si uso la aplicación para continuar después de descargar el archivo, aparece el error System.UnauthorizedAccessException, pero si cierro y abro la aplicación y luego edito el archivo guardado en iso, funciona, como he dicho es como si algo todavía estuviera usando la descarga archivo.

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(); }

este código funciona bien para descargar el mp3, como he probado el archivo de descarga. He visto si hay ejemplos donde el código termina con

targetStream.Close();

pero no me da eso, ¿hay otra forma de cerrar la descarga? Gracias.


En lugar de llamar a Close() o Dispose() me gusta utilizarlo, lo que hace el trabajo automáticamente. Entonces su método podría verse así:

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(); } } }