WinUI 應用程式可使用 Windows Runtime(WinRT)API 來存取檔案和資料夾,以進行常見的檔案操作。 本文將教你如何access檔案和資料夾、查詢系統函式庫、取得檔案屬性,以及操作像是圖片和文件等位置。
當你建立打包的 WinUI 應用程式時,可以使用 WinRT APIS 來在特定位置access檔案和資料夾。 這些 API 可讓您讀取和寫入應用程式設定、開啟檔案和資料夾選擇器,以及使用影片和音樂庫等沙箱位置。 你也可以將 WinRT API 與 Windows SDK 的 Win32 API 以及 .NET SDK 的 API 結合。
本文聚焦於 WinRT storage API,並示範如何:
- 查詢系統庫中的檔案和資料夾
- 檢索基本文件屬性,例如大小和修改日期
- 監視圖片庫的變更
查詢檔案和資料夾
以下範例說明如何使用 StorageFolder 和 StorageFile API 查詢 Documents 函式庫中的檔案與資料夾。 這個範例使用 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 來取得 Pictures 函式庫及 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.");
}
}