Share via


取得檔案屬性

重要 API

取得由 StorageFile 物件所表示檔案的屬性 (最上層、基本及延伸)。

注意

如需完整範例,請參閱檔案存取範例 \(英文\)。

必要條件

  • 了解通用 Windows 平台 (UWP) 應用程式的非同步程式設計

    您可以參閱在 C# 或 Visual Basic 中呼叫非同步 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) 來存取時,您可以將 String \(部分機器翻譯\) 物件 (代表要擷取之屬性的名稱) 的 IEnumerable \(部分機器翻譯\) 集合傳送到 BasicProperties.RetrievePropertiesAsync 方法,來取得延伸屬性。 此方法接著會傳回 IDictionary 集合。 接著會依名稱或索引,從集合擷取每個擴充屬性。

這個範例會列舉 Pictures 文件庫中的所有檔案、指定 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);
    }
}