Поделиться через


Доступ к файлам и папкам с помощью пакета 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