Доступ к файлам и папкам с помощью пакета SDK для приложений Windows и API WinRT
Упакованные приложения пакета SDK для приложений windows могут использовать API WinRT для чтения и записи параметров приложения, выбора файлов и папок, а также специальных песочниц, таких как библиотека видео/музыка. Кроме того, любое упакованое классическое приложение может использовать API WinRT и Win32 в пакете SDK для Windows, а также API, предоставляемые в пакете SDK для .NET. В этой статье содержатся инструкции по использованию API-интерфейсов хранилища WinRT для запроса файлов и папок, получения свойств файла и работы с библиотекой изображений .
Запрос файлов и папок
В следующем примере показано, как использовать API StorageFolder и StorageFile для запроса библиотеки документов для файлов и папок. В примере используется GetFilesInFolderAsync
метод для рекурсивного итерации по структуре папок и добавления имен файлов в StringBuilder
объект.
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}");
}
}
}
Получение базовых свойств файла
Следующий пример принимает GetFilesInFolderAsync
метод из предыдущего примера и добавляет возможность получения размера файла и даты, измененной для каждого файла. В примере используется API BasicProperties для получения размера файла и даты, измененных для каждого файла, форматирования размера файла и добавления даты, измененных к StringBuilder
объекту после каждого имени файла и папки.
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}");
}
}
}
Работа с библиотекой изображений
В этом примере приложение настроено на получение уведомлений при обновлении библиотеки изображений . В этом примере API StorageLibrary используется для получения библиотеки изображений и события DefinitionChanged для получения уведомлений при обновлении библиотеки. Событие DefinitionChanged
вызывается при изменении списка папок в текущей библиотеке. В этом примере свойство библиотеки Folders
используется для итерации папок в библиотеке изображений и записывает имя папки в консоль.
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.");
}
}
См. также
Доступ к файлам и папкам с помощью пакета SDK для приложений Windows и API .NET
Файлы, папки и библиотеки с помощью пакета SDK для приложений Windows
Windows developer