Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Доступ к файлам и папкам в папке, библиотеке, устройстве или сетевом расположении. Вы также можете запросить файлы и папки в данном расположении, создав запросы к файлам и папкам.
Инструкции по хранению данных приложения WinUI см. в классе ApplicationData .
Замечание
Полный пример см. в примере перечисления папок.
Необходимые условия
Общие сведения о асинхронном программировании для приложений WinUI
Вы можете узнать, как писать асинхронные приложения в C#, см. статью "Вызов асинхронных API" в C# или Visual Basic. Сведения о написании асинхронных приложений в C++/WinRT см. в статье "Параллелизм" и асинхронные операции с помощью C++/WinRT.
Разрешения доступа к местоположению
Например, для кода в этих примерах требуется возможность picturesLibrary, но ваша ситуация может потребовать другую возможность или не потребовать её вообще. Дополнительные сведения см. в разделе "Разрешения на доступ к файлам".
Перечисление файлов и папок в расположении
Замечание
Не забудьте указать возможность picturesLibrary (доступ к библиотеке изображений).
В этом примере мы сначала используем метод StorageFolder.GetFilesAsync , чтобы получить все файлы в корневой папке Объекта KnownFolders.PicturesLibrary (не в вложенных папках) и перечислить имя каждого файла. Затем мы используем метод StorageFolder.GetFoldersAsync, чтобы получить все подпапки в Библиотеке Изображений и перечислить имя каждой подпапки.
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());
}
Замечание
В C#не забудьте поместить асинхронное ключевое слово в объявление метода любого метода, в котором используется оператор await.
Кроме того, можно использовать метод StorageFolder.GetItemsAsync для получения всех элементов (файлов и вложенных папок) в определенном расположении. В следующем примере метод GetItemsAsync используется для получения всех файлов и вложенных папок в корневой папке Объекта KnownFolders.PicturesLibrary (не в вложенных папках). Затем в примере перечислены имена каждого файла и вложенных папок. Если элемент является вложенной папкой, пример добавляет символ "folder" к названию.
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());
}
}
Поиск файлов в заданном местоположении и перечисление подходящих файлов
В этом примере мы запрашиваем все файлы в knownFolders.PicturesLibrary , сгруппированные по месяцу, и на этот раз пример рекурсируется в вложенные папки. Во-первых, мы вызываем StorageFolder.CreateFolderQuery и передаем значение CommonFolderQuery.GroupByMonth методу. Это дает нам объект StorageFolderQueryResult .
Далее мы называем StorageFolderQueryResult.GetFoldersAsync , который возвращает объекты StorageFolder , представляющие виртуальные папки. В этом случае мы группируем по месяцам, поэтому виртуальные папки каждый представляет группу файлов с одинаковым месяцем.
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());
}
Выходные данные примера выглядят следующим образом.
July 2015 (2)
MyImage3.png
MyImage4.png
December 2014 (2)
MyImage1.png
MyImage2.png
Windows developer