Получение свойств файла

Основные API

Получение свойств — верхнего уровня, базового и расширенного — для файла, представленного объектом StorageFile.

Замечание

Полный пример см. в примере доступа к файлам.

Необходимые условия

  • Общие сведения о асинхронном программировании для приложений WinUI

    Вы можете узнать, как писать асинхронные приложения в C#, см. статью "Вызов асинхронных API" в C# или Visual Basic. Чтобы узнать, как писать асинхронные приложения в C++, см. раздел Асинхронное программирование в C++.

  • Разрешения доступа к местоположению

    Например, для кода в этих примерах требуется возможность picturesLibrary, но ваша ситуация может потребовать другую возможность или не потребовать её вообще. Дополнительные сведения см. в разделе "Разрешения на доступ к файлам".

Получение свойств верхнего уровня файла

Многие свойства файла верхнего уровня доступны как члены класса StorageFile . К этим свойствам относятся атрибуты файлов, тип контента, дата создания, отображаемое имя, тип файла и т. д.

Замечание

Не забудьте указать возможность picturesLibrary (доступ к библиотеке изображений).

В этом примере перечисляются все файлы в библиотеке изображений, доступ к нескольким свойствам верхнего уровня каждого файла.

// Enumerate all files in the Pictures library.
var folder = Windows.Storage.KnownFolders.PicturesLibrary;
var query = folder.CreateFileQuery();
var files = await query.GetFilesAsync();

foreach (Windows.Storage.StorageFile file in files)
{
    StringBuilder fileProperties = new StringBuilder();

    // Get top-level file properties.
    fileProperties.AppendLine("File name: " + file.Name);
    fileProperties.AppendLine("File type: " + file.FileType);
}

Получение основных свойств файла

Многие основные свойства файлов получаются при первом вызове метода StorageFile.GetBasicPropertiesAsync . Этот метод возвращает объект BasicProperties , который определяет свойства для размера элемента (файла или папки), а также при последнем изменении элемента.

В этом примере перечисляются все файлы в библиотеке изображений, доступ к нескольким основным свойствам каждого файла.

// Enumerate all files in the Pictures library.
var folder = Windows.Storage.KnownFolders.PicturesLibrary;
var query = folder.CreateFileQuery();
var files = await query.GetFilesAsync();

foreach (Windows.Storage.StorageFile file in files)
{
    StringBuilder fileProperties = new StringBuilder();

    // Get file's basic properties.
    Windows.Storage.FileProperties.BasicProperties basicProperties =
        await file.GetBasicPropertiesAsync();
    string fileSize = string.Format("{0:n0}", basicProperties.Size);
    fileProperties.AppendLine("File size: " + fileSize + " bytes");
    fileProperties.AppendLine("Date modified: " + basicProperties.DateModified);
}

Получение расширенных свойств файла

Помимо свойств верхнего уровня и базовых файлов, существует множество свойств, связанных с содержимым файла. К этим расширенным свойствам обращается метод BasicProperties.RetrievePropertiesAsync . (Объект BasicProperties получается путем вызова свойства StorageFile.Properties.) Хотя свойства верхнего уровня и базовые свойства файлов доступны как свойства класса — StorageFile и BasicProperties, соответственно— расширенные свойства получаются путем передачи коллекции объектов StringiEnumerable, представляющих имена свойств, которые необходимо извлечь в метод BasicProperties.RetrievePropertiesAsync. Затем этот метод возвращает коллекцию IDictionary . Затем каждое расширенное свойство извлекается из коллекции по имени или по индексу.

В этом примере перечисляются все файлы в библиотеке рисунков, указываются имена требуемых свойств (DataAccessed и FileOwner) в объекте List , передается объект List в BasicProperties.RetrievePropertiesAsync для получения этих свойств, а затем извлекает эти свойства по имени из возвращаемого объекта IDictionary .

Полный список расширенных свойств файла см. в свойствах Windows Core .

const string dateAccessedProperty = "System.DateAccessed";
const string fileOwnerProperty = "System.FileOwner";

// Enumerate all files in the Pictures library.
var folder = KnownFolders.PicturesLibrary;
var query = folder.CreateFileQuery();
var files = await query.GetFilesAsync();

foreach (Windows.Storage.StorageFile file in files)
{
    StringBuilder fileProperties = new StringBuilder();

    // Define property names to be retrieved.
    var propertyNames = new List<string>();
    propertyNames.Add(dateAccessedProperty);
    propertyNames.Add(fileOwnerProperty);

    // Get extended properties.
    IDictionary<string, object> extraProperties =
        await file.Properties.RetrievePropertiesAsync(propertyNames);

    // Get date-accessed property.
    var propValue = extraProperties[dateAccessedProperty];
    if (propValue != null)
    {
        fileProperties.AppendLine("Date accessed: " + propValue);
    }

    // Get file-owner property.
    propValue = extraProperties[fileOwnerProperty];
    if (propValue != null)
    {
        fileProperties.AppendLine("File owner: " + propValue);
    }
}