取得檔案屬性
重要 API
- StorageFile.GetBasicPropertiesAsync \(英文\)
- StorageFile.Properties \(英文\)
- StorageItemContentProperties.RetrievePropertiesAsync \(英文\)
取得由 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 物件中所需屬性的名稱 (DataAccessed 和 FileOwner),將 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);
}
}