使用 Windows 應用程式 SDK 和 WinRT API 存取檔案和資料夾
已封裝 Windows 應用程式 SDK 應用程式可以利用 WinRT API 來讀取和寫入應用程式設定、檔案和資料夾選擇器,以及特殊沙箱位置,例如影片/音樂媒體櫃。 此外,任何封裝的傳統型應用程式都可以利用 Windows SDK 中的 WinRT 和 WIN32 API,以及 .NET SDK 中提供的 API。 本文提供如何使用 WinRT 儲存體 API 來查詢檔案和資料夾、擷取檔案屬性,以及使用圖片媒體櫃的指引。
查詢檔案和資料夾
下列範例示範如何使用 StorageFolder 和 StorageFile API 來查詢檔案和資料夾的文件媒體櫃。 此範例會使用 GetFilesInFolderAsync
方法,以遞迴方式逐一查看資料夾結構,並將檔案名附加至 StringBuilder
物件。
using System.Text;
using Windows.Storage;
...
private async Task<string> GetDocumentsContentsAsync()
{
StorageFolder docsFolder = KnownFolders.DocumentsLibrary;
StringBuilder outputBuilder = new();
await GetFilesInFolderAsync(docsFolder, outputBuilder);
return outputBuilder.ToString();
}
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();
foreach (var item in storageItem)
{
if (item is StorageFolder)
{
await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
}
else
{
outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
}
}
}
取得基本檔案屬性
下列範例會採用上一個範例中的 GetFilesInFolderAsync
方法,並新增擷取每個檔案修改的檔案大小和日期的能力。 此範例會使用 BasicProperties API 來擷取每個檔案修改的檔案大小和日期、格式化檔案大小,並將修改的大小和日期附加至每個檔案和資料夾名稱之後的 StringBuilder
物件。
using System.Text;
using Windows.Storage;
using Windows.Storage.FileProperties;
...
private async Task GetFilesInFolderAsync(StorageFolder folder, StringBuilder outputBuilder)
{
IReadOnlyList<IStorageItem> storageItem = await folder.GetItemsAsync();
foreach (var item in storageItem)
{
if (item is StorageFolder)
{
await GetFilesInFolderAsync(item as StorageFolder, outputBuilder);
}
else
{
outputBuilder.AppendLine($"Found {item.Name} in folder {folder.Name}");
// Append each file's size and date modified.
BasicProperties basicProperties = await item.GetBasicPropertiesAsync();
string fileSize = string.Format("{0:n0}", basicProperties.Size);
outputBuilder.AppendLine($" - File size: {fileSize} bytes");
outputBuilder.AppendLine($" - Date modified: {basicProperties.DateModified}");
}
}
}
使用 [圖片] 媒體櫃
在此範例中,應用程式會設定為在更新圖片媒體櫃時接收通知。 此範例會使用 StorageLibrary API 來擷取圖片媒體櫃和 DefinitionChanged 事件,以在媒體櫃更新時接收通知。 當目前媒體櫃中的資料夾清單變更時,會叫用 DefinitionChanged
事件。 此範例會使用媒體櫃的 Folders
屬性逐一查看圖片媒體櫃中的資料夾,並將資料夾名稱寫入主控台。
using Windows.Storage;
...
private async Task Configure()
{
StorageLibrary picturesFolder = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
picturesFolder.DefinitionChanged += picturesFolder_DefinitionChanged;
}
private void picturesFolder_DefinitionChanged(StorageLibrary sender, object args)
{
foreach (StorageFolder item in sender.Folders)
{
Console.WriteLine($"Folder {item.Name} found.");
}
}