Freigeben über


Aufzählen und Abfragen von Dateien und Ordnern

Greifen Sie auf Dateien und Ordner in einem Ordner, einer Bibliothek, einem Gerät oder einem Netzwerkspeicherort zu. Sie können die Dateien und Ordner auch an einem Speicherort abfragen, indem Sie Datei- und Ordnerabfragen erstellen.

Anleitungen zum Speichern der WinUI-App-Daten finden Sie in der ApplicationData-Klasse .

Hinweis

 Ein vollständiges Beispiel finden Sie im Folder-Enumerationsbeispiel.

Voraussetzungen

Aufzählen von Dateien und Ordnern an einem Speicherort

Hinweis

 Denken Sie daran, die picturesLibrary-Funktion zu deklarieren.

In diesem Beispiel verwenden wir zuerst die StorageFolder.GetFilesAsync-Methode , um alle Dateien im Stammordner der KnownFolders.PicturesLibrary (nicht in Unterordnern) abzurufen und den Namen jeder Datei auflisten. Als Nächstes verwenden wir die StorageFolder.GetFoldersAsync-Methode , um alle Unterordner in der PicturesLibrary abzurufen und den Namen der einzelnen Unterordner auflisten.

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StringBuilder outputText = new StringBuilder();

IReadOnlyList<StorageFile> fileList = await picturesFolder.GetFilesAsync();

outputText.AppendLine("Files:");
foreach (StorageFile file in fileList)
{
    outputText.Append(file.Name + "\n");
}

IReadOnlyList<StorageFolder> folderList = await picturesFolder.GetFoldersAsync();
           
outputText.AppendLine("Folders:");
foreach (StorageFolder folder in folderList)
{
    outputText.Append(folder.DisplayName + "\n");
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
    // Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
    Windows::Storage::StorageFolder picturesFolder{
        Windows::Storage::KnownFolders::PicturesLibrary()
    };

    std::wstringstream outputString;
    outputString << L"Files:" << std::endl;

    for (auto const& file : co_await picturesFolder.GetFilesAsync())
    {
        outputString << file.Name().c_str() << std::endl;
    }

    outputString << L"Folders:" << std::endl;
    for (auto const& folder : co_await picturesFolder.GetFoldersAsync())
    {
        outputString << folder.Name().c_str() << std::endl;
    }

    OutputTextBlock().Text(outputString.str().c_str());
}

Hinweis

Denken Sie in C# daran, das asynchrone Schlüsselwort in die Methodendeklaration einer beliebigen Methode einzufügen, in der Sie den Await-Operator verwenden.

Alternativ können Sie die StorageFolder.GetItemsAsync-Methode verwenden, um alle Elemente (dateien und Unterordner) an einem bestimmten Speicherort abzurufen. Im folgenden Beispiel wird die GetItemsAsync-Methode verwendet, um alle Dateien und Unterordner im Stammordner der KnownFolders.PicturesLibrary (nicht in Unterordnern) abzurufen. Anschließend listet das Beispiel den Namen der einzelnen Dateien und Unterordner auf. Wenn das Element ein Unterordner ist, wird im Beispiel "folder" an den Namen angehängt.

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
StringBuilder outputText = new StringBuilder();

IReadOnlyList<IStorageItem> itemsList = await picturesFolder.GetItemsAsync();

foreach (var item in itemsList)
{
    if (item is StorageFolder)
    {
        outputText.Append(item.Name + " folder\n");

    }
    else
    {
        outputText.Append(item.Name + "\n");
    }
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
    // Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
    Windows::Storage::StorageFolder picturesFolder{
        Windows::Storage::KnownFolders::PicturesLibrary()
    };

    std::wstringstream outputString;

    for (Windows::Storage::IStorageItem const& item : co_await picturesFolder.GetItemsAsync())
    {
        outputString << item.Name().c_str();

        if (item.IsOfType(Windows::Storage::StorageItemTypes::Folder))
        {
            outputString << L" folder" << std::endl;
        }
        else
        {
            outputString << std::endl;
        }

        OutputTextBlock().Text(outputString.str().c_str());
    }
}

Abfragen von Dateien an einem Speicherort und Aufzählen übereinstimmener Dateien

In diesem Beispiel wird nach allen Dateien in der KnownFolders.PicturesLibrary gruppiert nach dem Monat abgefragt, und dieses Mal rekursiert das Beispiel in Unterordnern. Zunächst rufen wir StorageFolder.CreateFolderQuery auf und übergeben den CommonFolderQuery.GroupByMonth-Wert an die Methode. Das gibt uns ein StorageFolderQueryResult -Objekt.

Als Nächstes rufen wir StorageFolderQueryResult.GetFoldersAsync auf, das StorageFolder-Objekte zurückgibt, die virtuelle Ordner darstellen. In diesem Fall gruppieren wir nach Monat, sodass die virtuellen Ordner jeweils eine Gruppe von Dateien mit demselben Monat darstellen.

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

StorageFolderQueryResult queryResult =
    picturesFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth);
        
IReadOnlyList<StorageFolder> folderList =
    await queryResult.GetFoldersAsync();

StringBuilder outputText = new StringBuilder();

foreach (StorageFolder folder in folderList)
{
    IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync();

    // Print the month and number of files in this group.
    outputText.AppendLine(folder.Name + " (" + fileList.Count + ")");

    foreach (StorageFile file in fileList)
    {
        // Print the name of the file.
        outputText.AppendLine("   " + file.Name);
    }
}
// MainPage.h
// In MainPage.xaml: <TextBlock x:Name="OutputTextBlock"/>
#include <winrt/Windows.Storage.h>
#include <winrt/Windows.Storage.Search.h>
#include <sstream>
...
Windows::Foundation::IAsyncAction ExampleCoroutineAsync()
{
    // Be sure to specify the Pictures Folder capability in your Package.appxmanifest.
    Windows::Storage::StorageFolder picturesFolder{
        Windows::Storage::KnownFolders::PicturesLibrary()
    };

    Windows::Storage::Search::StorageFolderQueryResult queryResult{
        picturesFolder.CreateFolderQuery(Windows::Storage::Search::CommonFolderQuery::GroupByMonth)
    };

    std::wstringstream outputString;

    for (Windows::Storage::StorageFolder const& folder : co_await queryResult.GetFoldersAsync())
    {
        auto files{ co_await folder.GetFilesAsync() };
        outputString << folder.Name().c_str() << L" (" << files.Size() << L")" << std::endl;

        for (Windows::Storage::StorageFile const& file : files)
        {
            outputString << L"    " << file.Name().c_str() << std::endl;
        }
    }

    OutputTextBlock().Text(outputString.str().c_str());
}

Die Ausgabe des Beispiels sieht ähnlich wie folgt aus.

July ‎2015 (2)
   MyImage3.png
   MyImage4.png
‎December ‎2014 (2)
   MyImage1.png
   MyImage2.png