Sdílet prostřednictvím


Access souborů a složek pomocí rozhraní API WinUI 3 a WinRT

Aplikace WinUI můžou přistupovat k souborům a složkám s využitím rozhraní API Windows Runtime (WinRT) pro běžné souborové operace. V tomto článku se dozvíte, jak přistupovat k souborům a složkám, dotazovat se na systémové knihovny, načíst vlastnosti souboru a pracovat s umístěními, jako je složka Obrázky a Dokumenty.

Při sestavování zabalených aplikací WinUI můžete rozhraní API WinRT použít ke přístupu k souborům a složkám v konkrétních umístěních. Tato rozhraní API umožňují číst a zapisovat nastavení aplikace, otevírat nástroje pro výběr souborů a složek a pracovat s umístěními v izolovaném prostoru (sandbox), jako jsou knihovny videa a hudby. Rozhraní API WinRT můžete také kombinovat s rozhraními API Win32 ze sady Windows SDK a rozhraní API ze sady .NET SDK.

Tento článek se zaměřuje na rozhraní API Win storage RT a ukazuje, jak:

  • Dotazování souborů a složek v systémových knihovnách
  • Načtení základních vlastností souboru, jako je velikost a datum změny
  • Monitorujte změny v knihovně Obrázky

Dotazování souborů a složek

Následující příklad ukazuje, jak použít rozhraní API StorageFolder a StorageFile k dotazování knihovny Documents pro soubory a složky. V příkladu je použita metoda GetFilesInFolderAsync k rekurzivnímu procházení strukturou složek a připojování názvů souborů k objektu 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}");
        }
    }
}

Získání základních vlastností souboru

Následující příklad přebírá metodu GetFilesInFolderAsync z předchozího příkladu a přidává možnost načíst velikost souboru a datum změny pro každý soubor. Příklad používá rozhraní API BasicProperties k načtení velikosti souboru a data změny pro každý soubor, naformátuje velikost souboru a datum změny do objektu StringBuilder za každý název souboru a složky.

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

Práce s knihovnou Obrázky

V tomto příkladu je aplikace nakonfigurovaná tak, aby dostávala oznámení při aktualizaci knihovny Obrázky . Příklad používá rozhraní API StorageLibrary k načtení události Pictures a DefinitionChanged pro příjem oznámení při aktualizaci knihovny. Událost DefinitionChanged se vyvolá, když se změní seznam složek v aktuální knihovně. Příklad používá vlastnost knihovny Folders k iteraci mezi složkami v knihovně Obrázky a zapíše název složky do konzoly.

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

Viz také

Přístup k souborům a složkám pomocí Windows App SDK a .NET API

Soubory, složky a knihovny s Windows App SDK