Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения WinUI могут получать доступ к файлам и папкам с помощью API среды выполнения Windows (WinRT) для распространенных операций с файлами. В этой статье показано, как получить доступ к файлам и папкам, запрашивать системные библиотеки, извлекать свойства файла и работать с такими расположениями, как изображения и документы.
При создании упакованных приложений WinUI можно использовать API WinRT для доступа к файлам и папкам в определенных расположениях. Эти API позволяют считывать и записывать параметры приложения, открывать средства выбора файлов и папок, а также работать с изолированными расположениями, такими как библиотеки видео и музыки. Вы также можете объединить API WinRT с API Win32 из пакета SDK для Windows и API из пакета SDK для .NET.
В этой статье рассматриваются API-интерфейсы хранилища WinRT и демонстрируется, как:
- Запрос файлов и папок в системных библиотеках
- Получение основных свойств файла, таких как дата размера и изменения
- Мониторинг изменений в библиотеке изображений
Запрос файлов и папок
В следующем примере показано, как использовать API StorageFolder и StorageFile для запроса библиотеки Documents на предмет файлов и папок. В примере используется метод 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
Windows developer