获取文件属性

重要的 API

获取由 StorageFile 对象表示的文件属性:顶级、基本和扩展。

注意

有关完整示例,请参阅文件访问示例

必备条件

  • 了解通用 Windows 平台 (UWP) 应用的异步编程

    若要了解如何使用 C# 或 Visual Basic 编写异步应用,请参阅使用 C# 或 Visual Basic 调用异步 API。 若要了解如何使用 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 方法来访问。 (通过调用 StorageFile.Properties 属性可以获得 BasicProperties 对象。)尽管顶级和基本文件属性可以分别作为类的 StorageFileBasicProperties 属性进行访问,但扩展属性只能通过以下方法获得:将代表将要检索的属性名称的 String 对象的 IEnumerable 集合传递到 BasicProperties.RetrievePropertiesAsync 方法。 此方法随后会返回一个 IDictionary 集合。 然后,可以按名称或按索引从该集合中检索每个扩展属性。

以下示例枚举了图片库中的所有文件,并指定了一个 List 对象中所需属性(DataAccessedFileOwner)的名称,将该 List 对象传递到 BasicProperties.RetrievePropertiesAsync 以检索这些属性,然后按名称从返回的 IDictionary 对象中检索这些属性。

有关文件扩展属性的完整列表,请参阅 Windows 核心属性

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);
    }
}