Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
Grundlegendes zur asynchronen Programmierung für WinUI-Apps
Informationen zum Schreiben asynchroner Apps in C# finden Sie unter Aufrufen asynchroner APIs in C# oder Visual Basic. Informationen zum Schreiben asynchroner Apps in C++/WinRT finden Sie unter Parallelität und asynchrone Vorgänge mit C++/WinRT.
Zugriffsberechtigungen für den Speicherort
Der Code in diesen Beispielen erfordert beispielsweise die PicturesLibrary-Funktion, aber Ihr Standort erfordert möglicherweise eine andere Funktion oder gar keine Funktion. Weitere Informationen finden Sie unter Dateizugriffsberechtigungen.
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
Windows developer