En un artículo anterior detallamos el nuevo modelo de Confianza en las aplicaciones de Silverlight 4: la Confianza Elevada.  En este artículo usaremos este modo para poder acceder al sistema de archivos de la máquina del usuario sin necesidad de utilizar las cajas de diálogo OpenFileDialog o SaveFileDialog.

El proyecto

Para demostrar el acceso al sistema de archivos de la máquina del usuario crearemos una sencilla aplicación que muestre las imágenes de la carpeta “Mis Imágenes” en una lista y al hacer clic sobre cada una mostrar la imagen seleccionada.

Iniciaremos creando un nuevo proyecto de Silverlight 4 en Visual Studio .NET 2010 y lo nombraremos Demo.SL4.ConfianzaElevada.SistemaArchivos aceptando la opción predeterminada de crear un proyecto Web para probar la aplicación de Silverlight.

Además, necesitaremos configurar la aplicación para permitir la instalación Afuera del Navegador y será en la misma caja de diálogo de configuración en donde deberemos establecer el nivel de Confianza Elevada.  En el artículo anterior detallamos cómo hacer esto.

Enumerador SpecialFolder

Una vez instalada la aplicación en la máquina del usuario la clave será obtener la ruta en donde está la carpeta “Mis Imágenes”.  Esto es debido a que en la versión de Silverlight 4 Beta (la última versión al momento de crear este artículo) únicamente tendremos acceso a las carpetas del perfil del usuario (las carpetas Mi *) sin necesidad de las cajas de diálogo.  En vez de establecer la ruta de manera manual que potencialmente podría variar entre diferentes equipos y obviamente entre diferentes plataformas también es buena idea utilizar el enumerador SpecialFolder, quien nos regresará la ruta física según el valor seleccionado.  A continuación se muestra el código relacionado al evento Loaded de la aplicación en donde usamos el enumerador SpecialFolder en conjunto con el método GetFolderPath() de la clase Environment:

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    //Checamos si está ejecutando en Confianza Elevada
    if (Application.Current.HasElevatedPermissions)
    {
        //Obtiene la ruta a la carpeta "Mis Imágenes"
        string myPicturesPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

        //Establece como fuente de datos la lista de archivos en la carpeta
        //siempre y cuando sean JPG o PNG
        pictureList.ItemsSource =
            System.IO.Directory.EnumerateFiles(myPicturesPath).Where(f => f.EndsWith(".jpg") || f.EndsWith(".png"));
    }
}

Es muy importante destacar la propiedad HasElevatedPermissions de la clase Application ya que esta propiedad nos indica ultimadamente si la aplicación está ejecutando en Confianza Elevada o no.  Por tal motivo será buena idea encerrar la ejecución de código en el bloque if{}.

Si bien las únicas carpetas a las que tenemos acceso sin necesidad de utilizar OpenFileDialog y SaveFileDialog son aquellas del perfil del usuario, a través de las cajas de diálogo podemos seguir teniendo acceso a cualquier carpeta que el usuario indique.  Incluso, en Confianza Elevada podemos obtener más información acerca de los archivos seleccionados a través de estas cajas de diálogo, por ejemplo, la ruta física completa del archivo en cuestión

El resultado de la aplicación es el siguiente:

image 

Resumen

Las aplicaciones que ejecutan en Confianza Elevada tienen más funcionalidad, como por ejemplo el acceso al sistema de archivos de la máquina del usuario.

Sin usar las cajas de diálogo tradicionales OpenFileDialog y SaveFileDialog podemos acceder a las carpetas del perfil del usuario: Mis Imágenes, Mis Videos, Mi Música y Mis Documentos y potencialmente leer los archivos y su información relacionada.

Puedes descargar el código aquí

Puedes ver la demo en vivo aquí (requiere Silverlight 4 y ejecutar la aplicación Fuera del Navegador)

6 Responses to Silverlight 4 Beta – Confianza Elevada: Acceso al Sistema de Archivos

  1. Que tal Rocky, buen post. Una pregunta, en la Mac tambien tienes acceso a algunas carpetas sin usar cuadros de dialogo al usar confianza elevada? Podemos user SpecialFolders para obtenerlas tambien?

  2. Rodrigo says:

    Sí, también funciona en la Mac ya que se mapean a las carpetas del perfil del usuario como /users/rodrigo/Videos

  3. Juan says:

    Excelente amigo, gracias por el post, una pregunta, si yo quiero leer datos de un archivo de excel seria de manera similar? he intentantado con la interoperabilidad COM sin exito alguno. Lo que pretendo hacer es leer el excel y pasar la informacion a un datagrid. gracias de antemano.

  4. Rodrigo says:

    Sí, sería a través del API de COM de Excel para mayor facilidad

  5. Juan says:

    Gracias por tu pronta respuesta Rodrigo, el problema es que no logro saber como leer el excel, ya que la mayoria de los post que he visto traen como ejemplo la exportacion a excel (http://www.c-sharpcorner.com/UploadFile/pchandraker/1899/), el asunto es que utlizan datos de tipo “dynamic” y no estoy muy familiarizado con ellos. Otra de las cosas que lei, es que se debe conocer la API de excel y sabiendo de ella, utlizar los datos tipo dynamic para acceder a sus “metodos”. Te agradeceria que me orientaras un poco en este tema.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree