Archivos

Windows 8.1 mejora la compatibilidad con la administración de archivos desde la aplicación, nuevas formas de interactuar con el contenido del usuario a través de bibliotecas y la capacidad de insertar el contenido exclusivo de tu aplicación en el índice de Windows. Esto significa que tu aplicación puede acceder fácilmente al contenido del usuario y hacer que su propio contenido pueda ser detectado por otras aplicaciones de una forma más sencilla.

Novedades o actualizaciones de Windows 8.1

  • Selector de archivos actualizado para admitir nuevos modos de visualización de aplicaciones
  • Administración desde la aplicación de bibliotecas del usuario
  • Recuperación de carpetas o archivos primarios
  • Comparación de archivos con IsEqual
  • Nuevas propiedades de KnownFolders
  • Recuperación de archivos sin requisitos de control de errores
  • Exposición de archivos de visualización en escenarios de Abrir (con)
  • Adición de contenido de la aplicación al índice de Windows
  • Microsoft OneDrive
  • Compatibilidad con archivos de imagen DDS

Selector de archivos actualizado para admitir nuevos modos de visualización de aplicaciones

[Obtén la muestra del selector de archivos ahora.]

En Windows 8.1, las aplicaciones que se ejecuten en visualización de pantalla dividida y pantalla completa pueden llamar al selector de archivos. Esto ayuda a los usuarios a trabajar y realizar tareas múltiples de la manera en que deseen. Por ejemplo, si un usuario tiene abierta una conversación de Skype en una ventana y su aplicación de correo electrónico en otra, la aplicación de correo electrónico puede abrir el selector de archivos para incluir datos adjuntos sin que esta tenga que ir a la visualización de pantalla completa. Para obtener más información sobre el selector de archivos, consulta Inicio rápido: acceso a archivos mediante selectores de archivos.

Administración desde la aplicación de bibliotecas del usuario

[Obtén la muestra de la administración de bibliotecas ahora.]

Windows 8.1 presenta la clase StorageLibrary, que permite a los usuarios administrar carpetas con sus bibliotecas personales (como Música y Vídeos) desde dentro de una aplicación. Esto es especialmente útil en aplicaciones de galería multimedia donde los usuarios a menudo quieren ampliar sus colecciones agregando carpetas que contienen más imágenes, música o vídeo de su propiedad.

Todo esto es posible gracias a un selector de archivos especializado, al que se llama mediante métodos StorageLibrary, que permite a los usuarios agregar carpetas a sus bibliotecas. Los usuarios ya no tienen que salir de sus aplicaciones e ir al escritorio para ampliar su colección multimedia.

Recuperación de carpetas o archivos primarios

[Obtén la muestra del acceso a archivos ahora.]

Las API de almacenamiento para Windows 8 no definían un método para recuperar la carpeta primaria de un elemento de almacenamiento directamente, de modo que era necesario que los desarrolladores escribieran su propia lógica personalizada. En Windows 8.1, puedes usar el método GetParentAsync para obtener la StorageFolder primaria de un archivo o carpeta.

Importante  Para que el método GetParentAsync se ejecute correctamente, debes tener acceso al elemento primario, ya sea mediante la declaración de las funcionalidades de la biblioteca o mediante la persistencia de una carpeta de nivel superior en la lista de acceso futuro. Además, en lugar de generar una excepción, este método devuelve null si no puedes acceder al elemento primario.

Comparación de archivos con IsEqual

[Obtén la muestra del acceso a archivos ahora.]

Las API de almacenamiento para Windows 8 no definían un método para comparar directamente los elementos de almacenamiento con el fin de determinar si representaban el mismo elemento. Para intentar evitar este problema, los desarrolladores comparaban las rutas de acceso, pero seguían encontrando elementos que no tenían valores de ruta de acceso. En Windows 8.1, puedes usar el método IsEqual para determinar si dos elementos de almacenamiento representan el mismo archivo.

El siguiente ejemplo te muestra cómo comparar dos archivos de almacenamiento para detectar si son iguales usando el método nuevo.

function openNewFile() {
    var picker = new Windows.Storage.Pickers.FileOpenPicker;
    picker.fileTypeFilter.replaceAll(["*"]);
    picker.pickSingleFileAsync().then(function (file) {
        var alreadyOpenedFile = null;
        _openFiles.some(function (openFile) {
            if (file.IsEqual(openFile.file)) {
                alreadyOpenedFile = openFile;
                return true;
            }
            return false;
        });

        if (alreadyOpenedFile != null) {
            alreadyOpenedFile.window.activate();
        } else {
            createNewFileViewerWindow(file);
        }
    });
}

Nuevas propiedades de KnownFolders

Windows 8.1 introduce dos propiedades KnownFolders nuevas que te permiten obtener acceso a los archivos de dos ubicaciones adicionales: CameraRoll y Playlists.

La propiedad KnownFolders.CameraRoll te permite acceder a las fotos hechas con la cámara del dispositivo, de forma similar a la propiedad de Windows Phone 8 existente. La propiedad KnownFolders.Playlists te permite acceder a las listas de reproducción del usuario.

Recuperación de archivos sin requisitos de control de errores

[Obtén la muestra del acceso a archivos ahora.]

Windows 8.1 presenta el método StorageFolder.TryGetItemAsync, que permite a tu aplicación intentar recuperar un archivo o una carpeta por el nombre, sin tener que agregar lógica de detección de errores al código de la aplicación. Si no se encuentra el archivo o la carpeta, TryGetItemAsync devuelve null y no genera una excepción. Como el método devuelve null, también puedes usarlo para determinar si la carpeta o el archivo especificado existe.

Exposición de archivos de visualización en escenarios de Abrir (con)

En Windows 8.1, puedes usar la propiedad NeighboringFilesQuery para habilitar la navegación a los archivos cercanos al archivo para el que se activó una aplicación.

En Windows 8, la aplicación predeterminada para abrir contenido con una asociación de archivos específica obtiene un objeto que representa el archivo invocado solamente. Esto puede ser un problema para las aplicaciones de galería multimedia en las que los usuarios esperan navegar a archivos vecinos. En Windows 8.1, la aplicación predeterminada puede obtener la colección de archivos en la vista adyacente, es decir, la colección en la que se seleccionó el archivo invocado.

Tu aplicación necesita declarar una funcionalidad de biblioteca específica para obtener elementos del tipo correspondiente. Por ejemplo, para obtener imágenes en la NeighboringFilesQuery, tu aplicación debe declarar la funcionalidad de biblioteca de imágenes.

Este ejemplo muestra cómo recuperar una colección de archivos que son vecinos del archivo que activó una aplicación.

function activated(sender, e) {
    if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.file && e.files.size > 0) {
        var invokedFile = e.detail.files[0];
        var neighboringFiles = e.detail.neighboringFilesQuery;
        if (neighboringFiles) {
            result.neighboringFiles.findStartIndexAsync(e.detail.files[0]).done(function (index) {
                var invokedFileElement = document.getElementById("invokedFile");
                invokedFileElement.textContent = "Invoked item: " + invokedFile.name + ", at index " + index + " in view file enumeration.";

                var prevFileslist = document.getElementById("prevFilesList");
                result.neighboringFiles.getFilesAsync(0, index).done(function (fileList) {
                    fileList.forEach(function (file) {
                        // Create an entry in the list for the file.
                        var fileItemElement = document.createElement("li");
                        fileItemElement.textContent = file.name;
                        prevFileslist.appendChild(listItemElement);
                    });
                },
                function (error) {
                    // Handle error trying to get list of files.
                });

                var nextFileslist = document.getElementById("nextFilesList");
                result.neighboringFiles.getFilesAsync(index + 1, -1).done(function (fileList) {
                    fileList.forEach(function (file) {
                        // Create an entry in the list for the file.
                        var fileItemElement = document.createElement("li");
                        fileItemElement.textContent = file.name;
                        nextFileslist.appendChild(listItemElement);
                    });
                },
                function (error) {
                    // Handle error trying to get list of files.
                });
            },
            function (error) {
                // Handle error trying to get file index.
            });
        }
    }
}

app.addEventListener("activated", activated);

Adición de contenido de la aplicación al índice de Windows

[Obtén la muestra del indexador ahora.]

En Windows 8.1, el contenido de tu aplicación puede agregarse directamente al índice de Windows. Agregar contenido al índice garantiza la búsqueda rápida en el contenido de la aplicación con las consultas de la carpeta ApplicationIndexedContent o mediante el nuevo control de búsqueda en la aplicación. Puedes agregar propiedades de archivo y contenido mediante la nueva API establecida en Windows.Storage.Search o mediante la creación de archivos "appcontent-ms".

OneDrive

En Windows 8.1, OneDrive ofrece dos nuevas actualizaciones de características:

  • Almacenamiento de archivos

    Los usuarios con cuentas Microsoft (MSA) ahora pueden ir fácilmente a OneDrive en el selector de archivos y seleccionar archivos o carpetas para abrirlos en la aplicación.

  • Herramienta de administración de almacenamiento de OneDrive

    Hemos mejorado la experiencia de administración de cuotas de almacenamiento de OneDrive en Windows 8.1. Los usuarios pueden administrar OneDrive directamente desde Windows. Pueden ver su uso de almacenamiento, actualizar su plan de almacenamiento y reclamar espacio en OneDrive sin salir de la interfaz nativa de Windows 8.1.

Compatibilidad con archivos de imagen DDS

Ahora se admite el formato de archivo Microsoft DirectDraw Surface (DDS) en las aplicaciones de la Tienda Windows que usan JavaScript y el control WebView del lenguaje de marcado de aplicaciones extensible (XAML), lo que te permite crear aplicaciones WebGL que funcionan más rápidamente incluso con texturas mayores.

Acerca de la compresión por bloques y DDS

La compresión por bloques (BC) es una clase de compresión que se usa para almacenar datos de píxeles en un archivo DirectDraw Surface (DDS). A diferencia de otros formatos de archivo de imagen, las unidades de procesamiento gráfico (GPU) pueden realizar muestreos directamente desde formatos de compresión por bloques sin ningún procesamiento ni descompresión, mejorando el rendimiento de la carga de recursos de texturas en las aplicaciones de la Tienda Windows. Los formatos de BC usan un promedio de 4 a 8 bits por píxel, mientras que una textura RGBA típica usa 32 bits por píxel. Por lo tanto, los formatos de compresión por bloques también reducen el uso total de la memoria de GPU hasta un 87,5%, lo que permite usar un mayor número de activos o activos de mayor calidad en las aplicaciones de la Tienda Windows.

Aunque hay varios algoritmos de compresión por bloques, las aplicaciones de la Tienda Windows que usan JavaScript y el control WebView de XAML en Windows 8.1 solo admiten tres tipos de compresión por bloques en el formato de archivo DDS: BC1, BC2 y BC3. Las imágenes DDS comprimidas por bloques se cargarán mucho más rápidamente que las imágenes JPEG, porque casi no hay tiempo de descodificación de la CPU y puedes usar más recursos de textura, porque la compresión por bloques usa menos memoria de GPU. Los archivos DDS comprimidos por bloques son el formato de imagen ideal para fondos y texturas de juegos integrados.

Cómo usar la compresión por bloques en archivos DDS

Para convertir tus activos de imagen al formato de compresión por bloques en aplicaciones de la Tienda Windows que usan JavaScript o el controlWebView de XAML, tienes que tener en cuenta las siguientes restricciones:

  • Solo se admiten los formatos de compresión por bloques BC1, BC2 y BC3, que corresponden a los siguientes valores de la enumeración DXGI_FORMAT:

    • DXGI_FORMAT_BC1_UNORM
    • DXGI_FORMAT_BC2_UNORM
    • DXGI_FORMAT_BC3_UNORM
  • Deben usarse valores alfa premultiplicados. Se admiten tanto los archivos DDS heredados que usan formatos que definen explícitamente valores alfa premultiplicados (DXT1, DXT2, DXT4) como los nuevos archivos DDS que usan la estructura DDS_HEADER_DX10 con un valor DDS_ALPHA_MODE válido (DDS_ALPHA_MODE_OPAQUE y DDS_ALPHA_MODE_PREMULTIPLIED).

  • Las dimensiones X e Y deben ser múltiplos de 4 píxeles.

  • En DDS no se admiten texturas de volumen, mapas de cubos, mapas MIP ni formatos de textura.

Si no aplicas estas restricciones, tus archivos DSS no se cargarán en las aplicaciones de la Tienda Windows que usan JavaScript o el control WebView de XAML. Para obtener más información, consulta este vínculo.

Una vez creado un activo comprimido por bloques en un archivo DDS, puedes cargar el archivo DDS en el marcado o mediante JavaScript:

HTML

<img src=”sample.dds” />

JavaScript

var img = new Image();
img.src = “sample.dds”;

Para obtener más información sobre la compresión por bloques y el formato de archivo DirectDraw Surface, consulta el tema sobre la compresión por bloques, la guía de programación de DDS y la referencia de DDS.

Cuándo usar los formatos de compresión por bloques

Como ya hemos dicho, los archivos DDS comprimidos por bloques son geniales para aumentar el número de texturas grandes que puedes usar en tu aplicación de la Tienda Windows y mejorar el tiempo de carga de la aplicación. Sin embargo, aunque los archivos DDS comprimidos por bloques son más eficientes en cuanto al uso de la memoria de GPU, consumen más espacio en disco comparados con JPEG. Los archivos DDS comprimidos por bloques son más adecuados como activo local en tu paquete de la aplicación y no son el formato ideal para descargar a través de la red. Aunque Internet Explorer 11 admite los archivos DDS comprimidos por bloques, no se recomienda usar este formato en Internet debido a su mayor coste para la red.

Como el formato de compresión por bloques produce pérdida de información, debes asegurarte de que la calidad visual no se ve afectada al convertir a compresión por bloques, al igual que con otros formatos con pérdida de información. La compresión por bloques funciona muy bien con imágenes "naturales" del mundo real, pero puede producir artefactos en forma de gradientes bruscos y cambios de color.