Archivo por días: 5 agosto, 2013

Cómo usar el FileOpenPicker para seleccionar ficheros en las apps de Windows Store

 

Pues eso… ahora le toca el turno al FileOpenPicker el "seleccionador" de ficheros en las aplicaciones de la Tienda de Windows.

En las aplicaciones para la Tienda de Windows (Windows Store) esta es la única forma (que yo conozco) de acceder a una carpeta local (o de la red o de un disco extraíble o de un sistema de almacenamiento como Skydrive) y seleccionar un fichero.

Aunque antes hay que indicarle a la aplicación de que queremos acceder a esos sitios, para ello tendremos que abrir el fichero de manifiesto de la aplicación (Package.appxmanifest) y en la ficha Capabilities (ver figura 1) indicar que queremos utilizar el Private Networks y Removable Storage (por si queremos acceder a un disco externo/conectado por USB).

 

FileOpenPicker 02
Figura 1. Indicar las "Capabilities" de la aplicación

 

Lo siguiente que tenemos que hacer es indicar en la ficha Declarations que queremos usar el File Open Picker.

 

FileOpenPicker 03
Figura 2. En Declarations indicamos que queremos usar el File Open Picker

 

Tal como vemos en la figura 2 tenemos que indicar al menos un tipo de fichero (Supported file type) aunque no tiene porqué ser el mismo tipo que vamos a usar, en este ejemplo he indicado ".xml" y casualmente voy a buscar ese tipo de fichero, pero como veremos en el código, también voy a indicar que me muestre los que tengan la extensión .txt (además de los .xml).

La forma de usar ese control es desde dentro de un método asíncrono (async) ya que las llamadas a los métodos para acceder al fichero son llamadas asíncronas.

En el siguiente código vemos lo que necesitamos para usar esa clase. Dependiendo del tipo de ficheros a los que queramos acceder así lo indicaremos en la colección FileTypeFilter, en este ejemplo he añadido dos tipos: .xml y .txt, pero si quisiéramos acceder a todos los tipos, habría que indicar el asterisco (*), en el ejemplo el asterisco está comentado, pero si quieres hacer pruebas, quita el comentario.

Este es el código de Visual Basic, el de C# está más abajo.

Dim openPicker As New FileOpenPicker()
openPicker.FileTypeFilter.Add(".xml")
openPicker.FileTypeFilter.Add(".txt")
'openPicker.FileTypeFilter.Add("*")
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary
openPicker.ViewMode = PickerViewMode.List
Dim cfgFile As StorageFile = Await openPicker.PickSingleFileAsync()

If cfgFile Is Nothing Then Exit Sub

Dim sr = New StreamReader(Await cfgFile.OpenStreamForReadAsync)

 

Utilizando ese código podremos ver algo como la captura de la figura 3.

FileOpenPicker 01

Figura 3. El FileOpenPicker en acción

 

Y esto es prácticamente todo… aquí te dejo el código de ejemplo de C# para que no te quejes si prefieres los puntos y comas 😉

FileOpenPicker openPicker = new FileOpenPicker();
openPicker.FileTypeFilter.Add(".xml");
openPicker.FileTypeFilter.Add("*");
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
openPicker.ViewMode = PickerViewMode.List;
StorageFile cfgFile = await openPicker.PickSingleFileAsync();

if (cfgFile == null) return;

var sr = new StreamReader(await cfgFile.OpenStreamForReadAsync());

 

Comentarte que la clase FileOpenPicker está definida en Windows.Storage.Pickers y la clase StorageFile está definida en Windows.Storage.

Y esto ya si que es todo…

Nos vemos.

Guillermo