Condividi tramite


Accedere a file e cartelle con API WinUI e WinRT

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

Quando crei app WinUI in pacchetto, puoi usare le API WinRT per accedere a 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 di .NET SDK.

Questo articolo è incentrato sulle API di archiviazione WinRT 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 nella libreria Documenti per i file e le 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 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. Nell'esempio viene usata l'API di StorageLibrary per recuperare la libreria Immagini e l'evento 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à della libreria per scorrere le cartelle nella raccolta immagini di 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

Accedere a file e cartelle con Windows App SDK e API .NET

file, cartelle e librerie con Windows App SDK