Delen via


Toegang tot bestanden en mappen met WinUI- en WinRT-API's

WinUI-apps hebben toegang tot bestanden en mappen met behulp van Windows Runtime-API's (WinRT) voor algemene bestandsbewerkingen. In dit artikel leest u hoe u toegang krijgt tot bestanden en mappen, systeembibliotheken opvraagt, bestandseigenschappen ophaalt en werkt met locaties zoals Afbeeldingen en Documenten.

Wanneer u verpakte WinUI-apps bouwt, kunt u WinRT-API's gebruiken voor toegang tot bestanden en mappen op specifieke locaties. Met deze API's kunt u app-instellingen lezen en schrijven, bestands- en mapkiezers openen en werken met sandboxlocaties zoals de video- en muziekbibliotheken. U kunt WinRT-API's ook combineren met Win32-API's uit de Windows SDK en API's van de .NET SDK.

Dit artikel is gericht op de WinRT-opslag-API's en laat zien hoe u het volgende kunt doen:

  • Query's uitvoeren op bestanden en mappen in systeembibliotheken
  • Basisbestandseigenschappen ophalen, zoals grootte en wijzigingsdatum
  • Wijzigingen in de bibliotheek Afbeeldingen controleren

Query's uitvoeren op bestanden en mappen

In het volgende voorbeeld ziet u hoe u de StorageFolder- en StorageFile API's gebruikt om een query uit te voeren op de -bibliotheek Documenten bibliotheek voor bestanden en mappen. In het voorbeeld wordt de methode GetFilesInFolderAsync gebruikt om recursief de mapstructuur te doorlopen en de bestandsnamen toe te voegen aan een StringBuilder-object.

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

Basisbestandseigenschappen ophalen

In het volgende voorbeeld wordt de methode GetFilesInFolderAsync uit het vorige voorbeeld gebruikt en wordt de mogelijkheid toegevoegd om de bestandsgrootte en datum op te halen die voor elk bestand zijn gewijzigd. In het voorbeeld wordt de BasicProperties-API gebruikt om de bestandsgrootte en datum op te halen die voor elk bestand zijn gewijzigd, de bestandsgrootte op te maken en de grootte en datum toe te voegen aan het StringBuilder-object na elke bestandsnaam en mapnaam.

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

Werken met de Afbeeldingenbibliotheek

In dit voorbeeld is de app geconfigureerd voor het ontvangen van meldingen wanneer de bibliotheek Afbeeldingen wordt bijgewerkt. In het voorbeeld wordt de StorageLibrary-API gebruikt om de bibliotheek Afbeeldingen op te halen en om meldingen te ontvangen van de gebeurtenis DefinitionChanged wanneer de bibliotheek wordt bijgewerkt. De gebeurtenis DefinitionChanged wordt aangeroepen wanneer de lijst met mappen in de huidige bibliotheek wordt gewijzigd. In het voorbeeld wordt de eigenschap Folders van de bibliotheek gebruikt om de mappen in de Afbeeldingen bibliotheek te doorlopen en de naam van de map naar de console te schrijven.

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

Zie ook

Toegang tot bestanden en mappen met Windows App SDK en .NET-API's

Bestanden, mappen en bibliotheken met Windows App SDK