Partilhar via


Acesse arquivos e pastas com APIs WinUI e WinRT

Os aplicativos WinUI podem acessar arquivos e pastas usando APIs do Tempo de Execução do Windows (WinRT) para operações de arquivo comuns. Este artigo mostra como acessar arquivos e pastas, consultar bibliotecas do sistema, recuperar propriedades de arquivos e trabalhar com locais como Imagens e Documentos.

Ao criar aplicativos WinUI empacotados, você pode usar APIs do WinRT para acessar arquivos e pastas em locais específicos. Essas APIs permitem que você leia e escreva configurações de aplicativos, abra seletores de arquivos e pastas e trabalhe com locais em área restrita, como as bibliotecas de vídeo e música. Você também pode combinar APIs do WinRT com APIs do Win32 do SDK do Windows e APIs do SDK do .NET.

Este artigo se concentra nas APIs de armazenamento do WinRT e demonstra como:

  • Consultar arquivos e pastas em bibliotecas do sistema
  • Recuperar propriedades básicas do arquivo, como tamanho e data de modificação
  • Monitorar alterações na biblioteca de imagens

Consultar ficheiros e pastas

O exemplo a seguir mostra como usar as APIs StorageFolder e StorageFile para consultar arquivos e pastas na biblioteca Documents . O exemplo usa o GetFilesInFolderAsync método para iterar recursivamente através da estrutura de pastas e acrescentar os nomes de arquivo a um StringBuilder objeto.

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}");
        }
    }
}

Obter propriedades básicas do arquivo

O exemplo a seguir usa o GetFilesInFolderAsync método do exemplo anterior e adiciona a capacidade de recuperar o tamanho do arquivo e a data de modificação para cada arquivo. O exemplo usa a API BasicProperties para recuperar o tamanho do arquivo e a data de modificação para cada arquivo, formata o tamanho do arquivo e acrescenta o tamanho e a data modificados ao StringBuilder objeto após cada nome de arquivo e pasta.

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}");
        }
    }
}

Trabalhar com a biblioteca de imagens

Neste exemplo, a aplicação é configurada para receber notificações quando a biblioteca de Imagens é atualizada. O exemplo usa a API StorageLibrary para recuperar a biblioteca de Imagens e o evento DefinitionChanged para receber notificações quando a biblioteca é atualizada. O DefinitionChanged evento é invocado quando a lista de pastas na biblioteca atual é alterada. O exemplo usa a propriedade Folders da biblioteca para iterar pelas pastas na biblioteca de Imagens e grava o nome da pasta no console.

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.");
    }
}

Ver também

Aceder a ficheiros e pastas com o SDK da Aplicação Windows e APIs .NET

Ficheiros, pastas e bibliotecas com o SDK de Aplicações Windows