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