Sdílet prostřednictvím


Přístup k souborům a složkám pomocí rozhraní WinUI a rozhraní API WinRT

Aplikace WinUI mají přístup k souborům a složkám pomocí rozhraní API prostředí Windows Runtime (WinRT) pro běžné operace se soubory. V tomto článku se dozvíte, jak získat přístup k souborům a složkám, dotazovat se na systémové knihovny, načítat vlastnosti souborů a pracovat s umístěními, jako jsou obrázky a dokumenty.

Když vytváříte zabalené aplikace WinUI, můžete pomocí rozhraní API WinRT přistupovat 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 věnuje WinRT úložným API 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 StorageFolder a StorageFile API pro dotazování knihovny Documents na 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á BasicProperties API k načtení velikosti souboru a data změny pro každý soubor, formátování velikosti souboru, a následně připojení velikosti a data změny ke 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í knihovny Obrázků a události DefinitionChanged k příjmu 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í sady Windows App SDK a rozhraní .NET API

Soubory, složky a knihovny pomocí sady Windows App SDK