Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uzyskaj dostęp do plików i folderów w folderze, bibliotece, urządzeniu lub lokalizacji sieciowej. Możesz również wykonywać zapytania dotyczące plików i folderów w lokalizacji, tworząc zapytania dotyczące plików i folderów.
Aby uzyskać wskazówki dotyczące przechowywania danych aplikacji WinUI, zobacz klasę ApplicationData .
Uwaga / Notatka
Pełny przykład można znaleźć w przykładzie wyliczenia folderu.
Wymagania wstępne
Omówienie programowania asynchronicznego dla aplikacji WinUI
Aby dowiedzieć się, jak pisać aplikacje asynchroniczne w języku C#, zobacz Wywoływanie asynchronicznych interfejsów API w języku C# lub Visual Basic. Aby dowiedzieć się, jak pisać aplikacje asynchroniczne w języku C++/WinRT, zobacz Współbieżność i operacje asynchroniczne w języku C++/WinRT.
uprawnienia dostępu do lokalizacji
Na przykład kod w tych przykładach wymaga możliwości picturesLibrary, ale lokalizacja może wymagać innej możliwości lub braku możliwości. Aby dowiedzieć się więcej, zobacz Uprawnienia dostępu do plików.
Wyliczanie plików i folderów w lokalizacji
Uwaga / Notatka
Pamiętaj, aby zadeklarować uprawnienia picturesLibrary.
W tym przykładzie najpierw użyjemy metody StorageFolder.GetFilesAsync , aby pobrać wszystkie pliki w folderze głównym folderu KnownFolders.PicturesLibrary (nie w podfolderach) i wyświetlić nazwę każdego pliku. Następnie użyjemy metody StorageFolder.GetFoldersAsync , aby pobrać wszystkie podfoldery w folderze PicturesLibrary i wyświetlić nazwę każdego podfolderu.
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());
}
Uwaga / Notatka
W języku C#pamiętaj, aby umieścić słowo kluczowe asynchroniczne w deklaracji metody dowolnej metody, w której używasz operatora await.
Alternatywnie możesz użyć metody StorageFolder.GetItemsAsync , aby pobrać wszystkie elementy (pliki i podfoldery) w określonej lokalizacji. W poniższym przykładzie użyto metody GetItemsAsync, aby pobrać wszystkie pliki i podfoldery w folderze głównym folderu KnownFolders.PicturesLibrary (nie w podfolderach). Następnie w przykładzie wyświetlana jest nazwa każdego pliku i podfolderu. Jeśli element jest podfolderem, przykład dołącza "folder" do nazwy.
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());
}
}
Wykonywanie zapytań o pliki w lokalizacji i wyliczanie pasujących plików
W tym przykładzie odpytujemy wszystkie pliki w KnownFolders.PicturesLibrary pogrupowane według miesięcy, a tym razem przykład przeszukuje także podfoldery. Najpierw wywołujemy metodę StorageFolder.CreateFolderQuery i przekazujemy wartość CommonFolderQuery.GroupByMonth do metody . Daje nam to obiekt StorageFolderQueryResult.
Następnie wywołujemy metodę StorageFolderQueryResult.GetFoldersAsync , która zwraca obiekty StorageFolder reprezentujące foldery wirtualne. W tym przypadku grupujemy według miesięcy, więc foldery wirtualne reprezentują grupę plików z tym samym miesiącem.
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());
}
Dane wyjściowe przykładu wyglądają podobnie do poniższych.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png