ファイルのプロパティの取得

重要な API

StorageFile オブジェクトで表されるファイルのプロパティ (最上位、基本、拡張) を取得します。

Note

完全なサンプルについては、「File access sample」 (ファイル アクセスのサンプル) のページをご覧ください。

前提条件

  • ユニバーサル Windows プラットフォーム (UWP) アプリの非同期プログラミングについての理解

    C# や Visual Basic での非同期アプリの作成方法については、「C# または Visual Basic での非同期 API の呼び出し」をご覧ください。 C++ での非同期アプリの作成方法については、「C++ での非同期プログラミング」をご覧ください。

  • 場所へのアクセス許可

    たとえば、これらの例のコードでは picturesLibrary 機能が必要ですが、場所によっては別の機能が必要であったり、機能をまったく必要としない場合もあります。 詳しくは、「ファイル アクセス許可」をご覧ください。

ファイルの最上位プロパティの取得

多くの最上位ファイル プロパティは、StorageFile クラスのメンバーとしてアクセスできます。 これらのプロパティには、ファイル属性、コンテンツの種類、作成日、表示名、ファイルの種類などがあります。

Note

必ず 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 プロパティを呼び出して取得します)。最上位と基本ファイル プロパティは、クラス (それぞれ 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);
    }
}