Compartir a través de


Acceso a archivos y carpetas con SDK de Aplicaciones para Windows y API de WinRT

Las aplicaciones de SDK de Aplicaciones para Windows empaquetadas pueden aprovechar las API de WinRT para leer y escribir la configuración de la aplicación, los selectores de archivos y carpetas, y ubicaciones especiales de espacio aislado, como la biblioteca de vídeos y música. Además, cualquier aplicación de escritorio empaquetada puede usar las API de WinRT y Win32 en Windows SDK, así como las API proporcionadas en el SDK de .NET. En este artículo se proporcionan instrucciones sobre cómo usar las API de almacenamiento de WinRT para consultar archivos y carpetas, recuperar propiedades de archivo y trabajar con la biblioteca imágenes.

Consulta de archivos y carpetas

En el ejemplo siguiente se muestra cómo usar las API StorageFolder y StorageFile para consultar la biblioteca Documentos de archivos y carpetas. En el ejemplo se usa el método GetFilesInFolderAsync para recorrer en iteración recursiva la estructura de carpetas y anexar los nombres de archivo a un objeto StringBuilder.

using System.Text;
using Windows.Storage;
...
private async Task<string> GetDocumentsContentsAsync()
{
    StorageFolder docsFolder = KnownFolders.DocumentsLibrary;
    StringBuilder outputBuilder = new();
    await GetFilesInFolderAsync(docsFolder, outputBuilder);

    return outputBuilder.ToString();
}

private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
    IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();

    foreach (var item in storageItem)
    {
        if (item is StorageFolder)
        {
            await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
        }
        else
        {
            outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
        }
    }
}

Obtención de propiedades básicas de archivo

En el ejemplo siguiente se toma el método GetFilesInFolderAsync del ejemplo anterior y se agrega la capacidad de recuperar el tamaño y la fecha de archivo modificados para cada archivo. En el ejemplo se usa la API BasicProperties para recuperar el tamaño y la fecha de archivo modificados para cada archivo, se da formato al tamaño del archivo y se anexa el tamaño y la fecha modificados al objeto StringBuilder después de cada nombre de archivo y carpeta.

using System.Text;
using Windows.Storage;
using Windows.Storage.FileProperties;
...
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
    IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();

    foreach (var item in storageItem)
    {
        if (item is StorageFolder)
        {
            await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
        }
        else
        {
            outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");

            // Append each file's size and date modified.
            BasicProperties basicProperties = await item.GetBasicPropertiesAsync();
            string fileSize = string.Format("{0:n0}", basicProperties.Size);
            outputBuilder.AppendLine($" - File size: {fileSize} bytes");
            outputBuilder.AppendLine($" - Date modified: {basicProperties.DateModified}");
        }
    }
}

Trabajar con la biblioteca de imágenes

En este ejemplo, la aplicación está configurada para recibir notificaciones cuando se actualiza la biblioteca de imágenes. En el ejemplo se usa la API StorageLibrary para recuperar la biblioteca de imágenes y el evento DefinitionChanged para recibir notificaciones cuando se actualiza la biblioteca. El evento DefinitionChanged se invoca cuando cambia la lista de carpetas de la biblioteca actual. En el ejemplo se usa la propiedad de Folders la biblioteca para recorrer en iteración las carpetas de la biblioteca Imágenes y se escribe el nombre de la carpeta en la consola.

using Windows.Storage;
...
private async Task Configure()
{
    StorageLibrary picturesFolder = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
    picturesFolder.DefinitionChanged += picturesFolder_DefinitionChanged;
}
private void picturesFolder_DefinitionChanged(StorageLibrary sender, object args)
{
    foreach (StorageFolder item in sender.Folders)
    {
        Console.WriteLine($"Folder {item.Name} found.");
    }
}

Consulte también

Acceso a archivos y carpetas con el SDK de Aplicaciones para Windows y API de .NET

Archivos, carpetas y bibliotecas con SDK de Aplicaciones para Windows