Compartir a través de


Acceso a archivos y carpetas con las API de WinUI y WinRT

Las aplicaciones WinUI pueden acceder a archivos y carpetas mediante las API de Windows Runtime (WinRT) para las operaciones comunes de archivos. En este artículo se muestra cómo acceder a archivos y carpetas, consultar bibliotecas del sistema, recuperar propiedades de archivo y trabajar con ubicaciones como Imágenes y documentos.

Al compilar aplicaciones WinUI empaquetadas, puede usar las API de WinRT para acceder a archivos y carpetas en ubicaciones específicas. Estas API le permiten leer y escribir la configuración de la aplicación, abrir selectores de archivos y carpetas y trabajar con ubicaciones de espacio aislado, como las bibliotecas de vídeo y música. También puede combinar las API de WinRT con las API de Win32 desde el Windows SDK y las API desde el SDK de .NET.

Este artículo se centra en las API de almacenamiento de WinRT y muestra cómo:

  • Consulta de archivos y carpetas en bibliotecas del sistema
  • Recuperar propiedades básicas del archivo, como el tamaño y la fecha de modificación
  • Monitorear los cambios en la biblioteca de imágenes

Consulta de archivos y carpetas

En el ejemplo siguiente se muestra cómo usar el storageFolder de y las API de StorageFile para consultar la biblioteca documentos de para 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 las propiedades básicas del 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 de BasicProperties para recuperar el tamaño y la fecha de archivo modificados para cada archivo, da formato al tamaño del archivo y 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 la biblioteca Imágenes de se actualiza. En el ejemplo se usa la API StorageLibrary para recuperar la biblioteca Pictures y el evento DefinitionChanged para recibir notificaciones cuando la biblioteca se actualiza. El evento DefinitionChanged se invoca cuando cambia la lista de carpetas de la biblioteca actual. En el ejemplo se usa la propiedad Folders de la biblioteca para recorrer en iteración las carpetas de la biblioteca Imágenes y escribe el nombre de 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

Acceder a archivos y carpetas con el SDK de aplicaciones de Windows y las API de .NET

Archivos, carpetas y bibliotecas con windows App SDK