共用方式為


使用 Windows 應用程式 SDK 和 WinRT API 存取檔案和資料夾

已封裝 Windows 應用程式 SDK 應用程式可以利用 WinRT API 來讀取和寫入應用程式設定、檔案和資料夾選擇器,以及特殊沙箱位置,例如影片/音樂媒體櫃。 此外,任何封裝的傳統型應用程式都可以利用 Windows SDK 中的 WinRT 和 WIN32 API,以及 .NET SDK 中提供的 API。 本文提供如何使用 WinRT 儲存體 API 來查詢檔案和資料夾、擷取檔案屬性,以及使用圖片媒體櫃的指引。

查詢檔案和資料夾

下列範例示範如何使用 StorageFolderStorageFile 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.");
    }
}

另請參閱

使用 Windows 應用程式 SDK 和 .NET API 存取檔案和資料夾

使用 Windows 應用程式 SDK 的檔案、資料夾和程式庫