Condividi tramite


Accedi ai file e alle cartelle con le API WinUI 3 e WinRT

Le app WinUI possono accedere a file e cartelle usando le API Windows Runtime (WinRT) per le operazioni comuni sui file. Questo articolo illustra come accedere a file e cartelle, eseguire query sulle librerie di sistema, ottenere le proprietà dei file e usare percorsi come Immagini e Documenti.

Quando crei app WinUI in pacchetto, puoi usare APIWinRT per access file e cartelle in posizioni specifiche. Queste API consentono di leggere e scrivere impostazioni dell'app, aprire i selettore di file e cartelle e usare posizioni in modalità sandbox come le librerie Video e Musica. È anche possibile combinare API WinRT con API Win32 da Windows SDK e API da .NET SDK.

Questo articolo è incentrato sulle API di WinRT storage e illustra come:

  • Eseguire query su file e cartelle nelle librerie di sistema
  • Recuperare proprietà di file di base, ad esempio dimensioni e data di modifica
  • Monitorare le modifiche apportate alla raccolta immagini

Interrogare file e cartelle

Nell'esempio seguente viene illustrato come usare le API StorageFolder e StorageFile per eseguire query sulla libreria Documents per file e cartelle. Nell'esempio viene utilizzato il metodo GetFilesInFolderAsync per scorrere in modo ricorsivo la struttura di cartelle e accodare i nomi di file a un oggetto 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}");
        }
    }
}

Ottieni le proprietà di base dei file

L'esempio seguente accetta il metodo GetFilesInFolderAsync dell'esempio precedente e aggiunge la possibilità di recuperare le dimensioni e la data del file modificate per ogni file. L'esempio usa l'API BasicProperties per recuperare le dimensioni e la data del file modificate per ogni file, formatta le dimensioni del file e aggiunge le dimensioni e la data modificate all'oggetto StringBuilder dopo ogni nome di file e cartella.

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

Lavorare con la raccolta immagini

In questo esempio l'app è configurata per ricevere notifiche quando la libreria Immagini viene aggiornata. L'esempio usa l'API StorageLibrary per recuperare l'evento Pictures e la libreria DefinitionChanged per ricevere notifiche quando la libreria viene aggiornata. L'evento DefinitionChanged viene richiamato quando cambia l'elenco di cartelle nella libreria corrente. Nell'esempio viene utilizzata la proprietà Folders della libreria per scorrere le cartelle nella libreria Pictures e scrivere il nome della cartella nella 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.");
    }
}

Vedere anche

Accedi ai file e alle cartelle con le API di Windows App SDK e .NET

File, cartelle e librerie con Windows App SDK