Dela via


Åtkomst till filer och mappar med WinUI 3- och WinRT-API:er

WinUI-appar kan access filer och mappar med hjälp av Windows Runtime -API:er (WinRT) för vanliga filåtgärder. Den här artikeln visar hur du access filer och mappar, frågar systembibliotek, hämtar filegenskaper och arbetar med platser som Bilder och Dokument.

När du skapar paketerade WinUI-appar kan du använda WinRT-API:er för att access filer och mappar på specifika platser. Med dessa API:er kan du läsa och skriva appinställningar, öppna fil- och mappväljare och arbeta med begränsade platser som video- och musikbiblioteken. Du kan också kombinera WinRT-API:er med Win32-API:er från Windows SDK och API:er från .NET SDK.

Den här artikeln fokuserar på API:erna WinRT storage och visar hur du:

  • Fråga efter filer och mappar i systembibliotek
  • Hämta grundläggande filegenskaper som storlek och ändringsdatum
  • Övervaka ändringar i biblioteket Bilder

Fråga efter filer och mappar

I följande exempel visas hur du använder api:erna StorageFolder och StorageFile för att fråga Dokument för filer och mappar. I exemplet används GetFilesInFolderAsync metoden för att rekursivt iterera genom mappstrukturen och lägga till filnamnen i ett StringBuilder objekt.

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

Hämta grundläggande filegenskaper

Följande exempel tar GetFilesInFolderAsync metoden från föregående exempel och lägger till möjligheten att hämta filstorleken och datumet som ändrats för varje fil. I exemplet används API:et BasicProperties för att hämta filstorleken och datumet som ändrats för varje fil, formaterar filstorleken och lägger till storlek och datum som ändrats till objektet StringBuilder efter varje fil- och mappnamn.

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

Arbeta med biblioteket Bilder

I det här exemplet är appen konfigurerad för att ta emot meddelanden när biblioteket Bilder uppdateras. I exemplet används API:et StorageLibrary för att hämta Pictures-biblioteket och DefinitionChanged händelse för att ta emot meddelanden när biblioteket uppdateras. Händelsen DefinitionChanged anropas när listan över mappar i det aktuella biblioteket ändras. I exemplet används bibliotekets Folders egenskap för att iterera genom mapparna i biblioteket Bilder och skriva mappnamnet till konsolen.

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

Se även

Åtkomst till filer och mappar med Windows App SDK och .NET API:er

Filer, mappar och bibliotek med Windows App SDK