UWP入门(九)-- 枚举和查询文件和文件夹

核心 API 所在的命名空间:

  • Windows.Storage
  • Windows.Storage.Streams
  • Windows.Storage.Pickers

用它们三可以实现在文件中读取和写入文本和其他数据格式管理文件和文件夹

本文例子都是官方文档中的示例,只是里面代码对菜鸟不友好,我重新整理下。本文 github代码

1. GetFoldersAsync

首先使用 StorageFolder.GetFilesAsync 方法获取 PicturesLibrary 的根文件夹(而不是在子文件夹,就是一打开里面所有的当前文件)中的所有文件,并列出每个文件的名称。 接下来,我们使用 GetFoldersAsync 方法获取 PicturesLibrary 中的所有子文件夹并列出每个子文件夹的名称

注意:先在项目里的 Package.appxmanifest 处声明权限

这里写图片描述

            StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
            StringBuilder outputText = new StringBuilder();

            IReadOnlyList<StorageFile> fileList = await picturesFolder.GetFilesAsync();
            outputText.AppendLine("Files:");

            foreach (StorageFile file in fileList)
            {
                outputText.Append(file.Name + "\n");
            }

            IReadOnlyList<StorageFolder> folderList = await picturesFolder.GetFoldersAsync();
            outputText.AppendLine("Folders:");

            foreach (StorageFolder folder in folderList)
            {
                outputText.Append(folder.DisplayName + "\n");
            }
            //Debug.WriteLine(outputText.ToString()+"");
            MyText.Text = outputText.ToString() + "";

上面代码中图片路径位于:

这里写图片描述

运行结果:

这里写图片描述

之前路径显示的,现在路径为什么不显示,我也很迷惑

2. 使用 GetItemsAsync 方法获取某个特定位置中的所有项(文件和子文件夹)

使用 GetItemsAsync 方法获取某个特定位置中的所有项(文件和子文件夹)。 以下示例使用 GetItemsAsync 方法获取 PicturesLibrary 的根文件夹(而不是在子文件夹)中的所有文件和子文件夹。 然后,该示例会列出每个文件和子文件夹的名称。 如果该项是子文件夹,则该示例会向该名称追加 “folder”

private async void Button_Click2(object sender, RoutedEventArgs e)
        {
            StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
            StringBuilder outputText = new StringBuilder();

            IReadOnlyList<IStorageItem> itemsList = await picturesFolder.GetItemsAsync();

            foreach (var item in itemsList)
            {
                if (item is StorageFolder)
                {
                    outputText.Append(item.Name + " folder\n");

                }
                else
                {
                    outputText.Append(item.Name + "\n");

                }
            }
            MyText.Text = outputText.ToString() + "\nPath:==" + picturesFolder.Path;
        }

结果:

这里写图片描述

3. 查询某个位置中的文件并枚举匹配的文件

在此示例中,我们查询按月分组的 PicturesLibrary 中的所有文件,此时该示例会递归到子文件夹

  • 首先,我们调用 StorageFolder.CreateFolderQuery 并将 CommonFolderQuery.GroupByMonth 值传递给该方法。 这向我们提供了一个 StorageFolderQueryResult 对象

  • 接下来,我们调用 StorageFolderQueryResult.GetFoldersAsync,它将返回表示虚拟文件夹的 StorageFolder 对象。 在此示例中,我们按月分组,因此每个虚拟文件夹都表示一组具有相同月份的文件

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

            StorageFolderQueryResult queryResult = picturesFolder.CreateFolderQuery(CommonFolderQuery.GroupByMonth);

            IReadOnlyList<StorageFolder> folderList = await queryResult.GetFoldersAsync();

            StringBuilder outputText = new StringBuilder();

            foreach (StorageFolder folder in folderList)
            {
                IReadOnlyList<StorageFile> fileList = await folder.GetFilesAsync();

                // Print the month and number of files in this group.
                outputText.AppendLine(folder.Name + " (" + fileList.Count + ")");

                foreach (StorageFile file in fileList)
                {
                    // Print the name of the file.
                    outputText.AppendLine("   " + file.Name);
                }
            }
            MyText.Text = outputText.ToString() + "\nPath:==" + picturesFolder.Path;

结果:
这里写图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值