Hozzáférés fájlokhoz és mappákhoz WinUI 3 és WinRT API-kkal

WinUI-alkalmazások fájlokat és mappákat érhetnek el a Windows Runtime (WinRT) API-kon keresztül a gyakori fájlműveletekhez. Ez a cikk bemutatja, hogyan érheti el a fájlokat és mappákat, hogyan kérdezheti le a rendszertárakat, lekérdezheti a fájltulajdonságokat, és hogyan dolgozhat olyan helyekkel, mint a képek és dokumentumok.

Amikor csomagolt WinUI-alkalmazásokat készít, a WinRT API-kat használhatja a fájlok és mappák adott helyeken való elérésére. Ezek az API-k lehetővé teszik az alkalmazásbeállítások olvasását és írását, a fájl- és mappaválasztók megnyitását, valamint a védőfalas helyekkel, például a Video- és Zenetárakkal való munkát. A WinRT API-kat a Windows SDK-ból származó Win32 API-kkal és az .NET SDK API-ival is kombinálhatja.

Ez a cikk a WinRT storage API-kkal foglalkozik, és bemutatja, hogyan:

  • Fájlok és mappák lekérdezése a rendszertárakban
  • Alapvető fájltulajdonságok, például a méret és a módosítás dátuma lekérése
  • A Képek tár módosításainak figyelése

Fájlok és mappák lekérdezése

Az alábbi példa bemutatja, hogyan használhatja a StorageFolder és StorageFile API-kat a fájlok és mappák Documents könyvtár lekérdezéséhez. A példa a GetFilesInFolderAsync metódussal rekurzívan végigvezeti a mappastruktúrát, és hozzáfűzi a fájlneveket egy StringBuilder objektumhoz.

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

Alapszintű fájltulajdonságok lekérése

Az alábbi példa az előző példából veszi a GetFilesInFolderAsync metódust, és lehetővé teszi az egyes fájlokhoz módosított fájlméret és dátum lekérését. A példa a BasicProperties API használatával kéri le az egyes fájlokhoz módosított fájlméretet és dátumot, formázza a fájlméretet, és hozzáfűzi a StringBuilder objektumhoz módosított méretet és dátumot az egyes fájlok és mappák neve után.

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

A Képek tár használata

Ebben a példában az alkalmazás úgy van konfigurálva, hogy értesítéseket kapjon a Képek tár frissítésekor. A példa a StorageLibrary API használatával kéri le a Pictures kódtárat és a DefinitionChanged eseményt, hogy értesítéseket kapjon a tár frissítésekor. Az DefinitionChanged esemény akkor lesz meghívva, ha az aktuális tár mappáinak listája megváltozik. A példa a tár tulajdonságát Folders használja a Képek tár mappáinak iterálásához, és a mappa nevét a konzolra írja.

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

Lásd még

Hozzáférés a fájlokhoz és mappákhoz a Windows App SDK és .NET API-k segítségével

Fájlok, mappák és könyvtárak a Windows App SDK-val