[源码下载]

背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件

作者:webabcd

介绍
背水一战 Windows 10 之 文件系统

  • 获取文件夹和文件
  • 分组文件夹
  • 排序过滤文件夹和文件
  • 搜索文件

示例
1、演示如何获取文件夹和文件
FileSystem/FolderFileAccess.xaml

<Page
x:Class="Windows10.FileSystem.FolderFileAccess"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.FileSystem"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnGetFolder" Content="获取文件夹" Click="btnGetFolder_Click" Margin="5" /> <Button Name="btnGetFolderFile" Content="获取文件夹和文件" Click="btnGetFolderFile_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>

FileSystem/FolderFileAccess.xaml.cs

/*
* 演示如何获取文件夹和文件
*
* KnownFolders - 已知文件夹
* GetFolderForUserAsync(User user, KnownFolderId folderId) - 获取指定用户的指定文件夹的 StorageFolder 对象
* user - 指定用户,传 null 则为当前用户(关于 User 相关请参见 /UserAndAccount/UserInfo.xaml)
* folderId - 指定文件夹,一个 KnownFolderId 类型的枚举值,常用的有 RemovableDevices, DocumentsLibrary, PicturesLibrary, VideosLibrary, MusicLibrary 等,其他更多的请参见文档
*
* StorageFolder - 文件夹操作类
* GetFileAsync(string name) - 在当前 StorageFolder 下获取指定名字的 StorageFile
* 不存在的话会抛出 FileNotFoundException 异常
* GetFolderAsync(string name) - 在当前 StorageFolder 下获取指定名字的 StorageFolder
* 不存在的话会抛出 FileNotFoundException 异常
* GetItemAsync(string name) - 在当前 StorageFolder 下获取指定名字的 IStorageItem
* 不存在的话会抛出 FileNotFoundException 异常
* GetFilesAsync() - 获取当前 StorageFolder 下的 StorageFile 集合
* GetFoldersAsync() = 获取当前 StorageFolder 下的 StorageFolder 集合
* GetItemsAsync() - 获取当前 StorageFolder 下的 IStorageItem 集合
* IsOfType(StorageItemTypes type) - 判断当前的 IStorageItem 是 StorageItemTypes.File 还是 StorageItemTypes.Folder
* GetParentAsync() - 获取当前 StorageFolder 的父 StorageFolder,找不到就返回 null
* IsEqual(IStorageItem item) - 判断两个 StorageFolder 是否相等
* TryGetItemAsync(string name) - 在当前 StorageFolder 下获取指定名字的 IStorageItem
* 不存在的话会也不会抛出 FileNotFoundException 异常,而是会返回 null
* GetFolderFromPathAsync(string path) - 静态方法,用于获取指定路径的 StorageFolder 对象(没有权限的话会抛出异常)
* GetIndexedStateAsync() - 返回当前文件夹的被系统索引的状态(一个 IndexedState 类型的枚举)
*
* StorageFile - 文件操作类
* IsOfType(StorageItemTypes type) - 判断当前的 IStorageItem 是 StorageItemTypes.File 还是 StorageItemTypes.Folder
* GetParentAsync() - 获取当前 StorageFile 的父 StorageFolder,找不到就返回 null
* IsEqual(IStorageItem item) - 判断两个 StorageFile 是否相等
*
*
* 注:
* 1、如果想要获取任意路径的 StorageFolder 或 StorageFile 的话,可以通过 Picker 让用户选择
* 2、对于处理文件夹和文件来说,最好都放到 try catch 中,因为不定会有什么异常呢
* 3、StorageFile 和 StorageFolder 有很多共同的接口(File 代表文件,Folder 代表文件夹,Item 代表文件和文件夹),详见文档
* 4、对于处理 KnownFolders 已知文件夹来说
* 需要在 Package.appxmanifest 中配置 <Capability Name="removableStorage" />, <Capability Name="picturesLibrary" />, <Capability Name="videosLibrary" />, <Capability Name="musicLibrary" />, <Capability Name="documentsLibrary" />
* 5、对于处理 KnownFolderId.DocumentsLibrary 中的文件来说
* 需要在 Package.appxmanifest 对相关类型的文件配置好文件关联
*/ using System;
using System.Collections.Generic;
using System.IO;
using Windows.Storage;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.FileSystem
{
public sealed partial class FolderFileAccess : Page
{
public FolderFileAccess()
{
this.InitializeComponent();
} // 获取文件夹
private async void btnGetFolder_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = ""; // 获取当前用户的“图片库”的 StorageFolder 对象
StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); // 获取“图片库”所包含的全部文件夹
IReadOnlyList<StorageFolder> folderList = await picturesFolder.GetFoldersAsync();
foreach (StorageFolder storageFolder in folderList)
{
lblMsg.Text += " " + storageFolder.Name;
lblMsg.Text += Environment.NewLine;
} // 在当前 StorageFolder 下获取指定名字的 StorageFolder,不存在的话会抛出 FileNotFoundException 异常
try
{
await picturesFolder.GetFolderAsync("aabbcc");
}
catch (FileNotFoundException)
{
await new MessageDialog("在“图片库”中找不到名为“aabbcc”的文件夹").ShowAsync();
} // 在当前 StorageFolder 下获取指定名字的 IStorageItem,不存在的话会也不会抛出 FileNotFoundException 异常,而是会返回 null
IStorageItem item = await picturesFolder.TryGetItemAsync("aabbcc");
if (item == null)
{
await new MessageDialog("在“图片库”中找不到名为“aabbcc”的文件夹或文件").ShowAsync();
}
} // 获取文件夹和文件
private async void btnGetFolderFile_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = ""; // 获取当前用户的“图片库”的 StorageFolder 对象
StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); // 获取“图片库”所包含的全部文件夹和文件
IReadOnlyList<IStorageItem> storageItems = await picturesFolder.GetItemsAsync();
foreach (IStorageItem storageItem in storageItems)
{
if (storageItem.IsOfType(StorageItemTypes.Folder)) // 是文件夹
{
StorageFolder storageFolder = storageItem as StorageFolder;
lblMsg.Text += "folder: " + storageFolder.Name;
lblMsg.Text += Environment.NewLine;
}
else if (storageItem.IsOfType(StorageItemTypes.File)) // 是文件
{
StorageFile storageFile = storageItem as StorageFile;
lblMsg.Text += "file: " + storageFile.Name;
lblMsg.Text += Environment.NewLine;
}
}
}
}
}

2、演示如何分组文件夹,排序过滤文件夹和文件,搜索文件
FileSystem/FolderFileQuery.xaml

<Page
x:Class="Windows10.FileSystem.FolderFileQuery"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.FileSystem"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnFolderGroup" Content="分组文件夹" Click="btnFolderGroup_Click" Margin="5" /> <Button Name="btnFolderFileOrderFilter" Content="排序过滤文件夹和文件" Click="btnFolderFileOrderFilter_Click" Margin="5" /> <Button Name="btnFileSearch" Content="搜索文件" Click="btnFileSearch_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>

FileSystem/FolderFileQuery.xaml.cs

/*
* 演示如何分组文件夹,排序过滤文件夹和文件,搜索文件
*
* StorageFolder - 文件夹操作类。与分组,排序,过滤,搜索相关的接口如下(File 代表文件,Folder 代表文件夹,Item 代表文件和文件夹)
* public StorageFileQueryResult CreateFileQuery();
* public StorageFileQueryResult CreateFileQuery(CommonFileQuery query);
* public StorageFileQueryResult CreateFileQueryWithOptions(QueryOptions queryOptions);
* public StorageFolderQueryResult CreateFolderQuery();
* public StorageFolderQueryResult CreateFolderQuery(CommonFolderQuery query);
* public StorageFolderQueryResult CreateFolderQueryWithOptions(QueryOptions queryOptions);
* public StorageItemQueryResult CreateItemQuery();
* public StorageItemQueryResult CreateItemQueryWithOptions(QueryOptions queryOptions);
* public IAsyncOperation<IReadOnlyList<StorageFile>> GetFilesAsync(CommonFileQuery query, uint startIndex, uint maxItemsToRetrieve);
* public IAsyncOperation<IReadOnlyList<StorageFile>> GetFilesAsync(CommonFileQuery query);
* public IAsyncOperation<IReadOnlyList<StorageFolder>> GetFoldersAsync(CommonFolderQuery query, uint startIndex, uint maxItemsToRetrieve);
* public IAsyncOperation<IReadOnlyList<StorageFolder>> GetFoldersAsync(CommonFolderQuery query);
* public IAsyncOperation<IReadOnlyList<IStorageItem>> GetItemsAsync(uint startIndex, uint maxItemsToRetrieve);
* public bool AreQueryOptionsSupported(QueryOptions queryOptions);
* public bool IsCommonFolderQuerySupported(CommonFolderQuery query);
* public bool IsCommonFileQuerySupported(CommonFileQuery query);
*
* CommonFolderQuery - 文件夹分组方式枚举
*
* CommonFileQuery - 文件排序方式枚举
*
* QueryOptions - 查询参数
* 可以通过 FolderDepth 指定是只查询根目录还是查询根目录和所有子目录
* 可以通过 IndexerOption 指定查询时,如何使用系统索引
* 可以指定 CommonFolderQuery
* 可以指定 CommonFileQuery 和需要过滤的文件类型
* 通过 SetPropertyPrefetch(), SetThumbnailPrefetch() 可以预加载指定的属性和指定规格的缩略图(耗费更多的资源,加快检索速度)
*
* StorageFileQueryResult, StorageFolderQueryResult, StorageItemQueryResult - 查询实例
* 可以执行这个查询,可以获取这个查询的结果的总数,可以按指的 startIndex 和 maxNumber 执行这个查询,可以设置新的查询参数
*
*
* 注:以上接口不再一一说明,看看下面的示例代码就基本都明白了
*/ using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.Storage.Search;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.FileSystem
{
public sealed partial class FolderFileQuery : Page
{
public FolderFileQuery()
{
this.InitializeComponent();
} // 分组文件夹
private async void btnFolderGroup_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = ""; StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); // 文件夹按月分组查询参数,其他多种分组方式请参见 CommonFolderQuery 枚举
CommonFolderQuery folderQuery = CommonFolderQuery.GroupByMonth; // 判断一下 picturesFolder 是否支持指定的查询参数
if (picturesFolder.IsCommonFolderQuerySupported(folderQuery))
{
// 创建查询
StorageFolderQueryResult queryResult = picturesFolder.CreateFolderQuery(folderQuery); // 执行查询
IReadOnlyList<StorageFolder> folderList = await queryResult.GetFoldersAsync(); foreach (StorageFolder storageFolder in folderList) // 这里的 storageFolder 就是按月份分组后的月份文件夹(当然,物理上并没有月份文件夹)
{
IReadOnlyList<StorageFile> fileList = await storageFolder.GetFilesAsync();
lblMsg.Text += storageFolder.Name + " (" + fileList.Count + ")";
lblMsg.Text += Environment.NewLine;
foreach (StorageFile file in fileList) // 月份文件夹内的文件
{
lblMsg.Text += " " + file.Name;
lblMsg.Text += Environment.NewLine;
}
}
}
} // 排序过滤文件夹和文件
private async void btnFolderFileOrderFilter_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = ""; StorageFolder picturesFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.PicturesLibrary); // 设置需要过滤的文件的扩展名
List<string> fileTypeFilter = new List<string>();
fileTypeFilter.Add(".txt"); // 创建一个查询参数,可以指定文件的排序方式和文件的类型过滤。文件的各种排序方式请参见 CommonFileQuery 枚举
QueryOptions query = new QueryOptions(CommonFileQuery.OrderByName, fileTypeFilter); // 默认是正序的,如果需要倒序的话可以这样写
SortEntry se = query.SortOrder[];
se.AscendingOrder = false;
query.SortOrder.RemoveAt();
query.SortOrder.Add(se); // 判断一下 picturesFolder 是否支持指定的查询参数
if (picturesFolder.AreQueryOptionsSupported(query))
{
// 创建查询
StorageItemQueryResult queryResult = picturesFolder.CreateItemQueryWithOptions(query); // 执行查询
IReadOnlyList<IStorageItem> storageItems = await queryResult.GetItemsAsync(); foreach (IStorageItem storageItem in storageItems)
{
if (storageItem.IsOfType(StorageItemTypes.Folder)) // 是文件夹
{
StorageFolder storageFolder = storageItem as StorageFolder;
lblMsg.Text += "folder: " + storageFolder.Name;
lblMsg.Text += Environment.NewLine;
}
else if (storageItem.IsOfType(StorageItemTypes.File)) // 是文件
{
StorageFile storageFile = storageItem as StorageFile;
lblMsg.Text += "file: " + storageFile.Name;
lblMsg.Text += Environment.NewLine;
}
}
}
} // 搜索文件
private async void btnFileSearch_Click(object sender, RoutedEventArgs e)
{
// 准备在“音乐库”中进行搜索
StorageFolder musicFolder = await KnownFolders.GetFolderForUserAsync(null, KnownFolderId.MusicLibrary); // 准备搜索所有类型的文件
List<string> fileTypeFilter = new List<string>();
fileTypeFilter.Add("*"); // 搜索的查询参数
QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderByDate, fileTypeFilter);
// 指定 AQS 字符串(Advanced Query Syntax),参见 http://msdn.microsoft.com/zh-cn/library/windows/apps/aa965711.aspx
queryOptions.UserSearchFilter = "五月天";
// 搜索根目录和所有子目录
queryOptions.FolderDepth = FolderDepth.Deep; // 根据指定的参数创建一个查询
StorageFileQueryResult fileQuery = musicFolder.CreateFileQueryWithOptions(queryOptions); lblMsg.Text = "在音乐库中搜索“五月天”,结果如下:";
lblMsg.Text += Environment.NewLine; // 开始搜索,并返回检索到的文件列表
IReadOnlyList<StorageFile> files = await fileQuery.GetFilesAsync(); if (files.Count == )
{
lblMsg.Text += "什么都没搜到";
}
else
{
foreach (StorageFile file in files)
{
lblMsg.Text += file.Name;
lblMsg.Text += Environment.NewLine;
}
}
}
}
}

OK
[源码下载]

背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件的更多相关文章

  1. 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图

    [源码下载] 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取文件夹的属性 ...

  2. 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

    [源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 ...

  3. 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图

    [源码下载] 背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获 ...

  4. 背水一战 Windows 10 (88) - 文件系统: 操作文件夹和文件

    [源码下载] 背水一战 Windows 10 (88) - 文件系统: 操作文件夹和文件 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 创建文件夹,重命名文件夹,删除文件夹, ...

  5. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  6. 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引

    [源码下载] 背水一战 Windows 10 (92) - 文件系统: 读写“最近访问列表”和“未来访问列表”, 管理以及使用索引 作者:webabcd 介绍背水一战 Windows 10 之 文件系 ...

  7. 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据

    [源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...

  8. 背水一战 Windows 10 (119) - 后台任务: 后台下载任务(任务分组,组完成后触发后台任务)

    [源码下载] 背水一战 Windows 10 (119) - 后台任务: 后台下载任务(任务分组,组完成后触发后台任务) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台下 ...

  9. 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

    [源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...

随机推荐

  1. 深度学习原理与框架-CNN在文本分类的应用 1.tf.nn.embedding_lookup(根据索引数据从数据中取出数据) 2.saver.restore(加载sess参数)

    1. tf.nn.embedding_lookup(W, X) W的维度为[len(vocabulary_list), 128], X的维度为[?, 8],组合后的维度为[?, 8, 128] 代码说 ...

  2. Signals的使用(通知)

    https://docs.djangoproject.com/en/2.1/topics/signals/

  3. cmd创建文件命令

    一.建立空文件的几种方法 1.cd.>a.txt cd.表示改变当前目录为当前目录,即等于没改变:而且此命令不会有输出. >表示把命令输出写入到文件.后面跟着a.txt,就表示写入到a.t ...

  4. 今天花了好长的时间终于把SecureCRT安装成功了 现在分享给大家 安装的步骤, 希望对大家用帮助

    转载地址:https://www.cnblogs.com/lianghe01/p/6618651.html 今天花了好长的时间终于把SecureCRT安装成功了 现在分享给大家 安装的步骤, 希望对大 ...

  5. 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)

    原网址:https://blog.csdn.net/u012907049/article/details/72764151 前言 VueJS可以说是近些年来最火的前端框架之一,越来越多的网站开始使用v ...

  6. python 内置元祖子类

    a = (zhangsan,20,nv,123@163.com) 输出姓名 a[0] 输出年龄 a[1] 输出性别 a[2] ..... 这样写可读性非常低 使用 内置元祖子类 from collec ...

  7. Pandas字符串操作及实例应用

    字符串操作 字符串对象方法 val = 'a,b, guido' val.split(',') ['a', 'b', ' guido'] pieces = [x.strip() for x in va ...

  8. android 无法import

    参考 https://blog.csdn.net/u012489412/article/details/72784095 File - Invalidate Caches/Restart

  9. 通过启动函数定位main()函数

      如下,通过vc6.0编写一个hello world程序.尝试结合汇编代码.分析启动函数找到main函数.   在printf(xxx)插入断点,调试执行.如下,在堆栈窗口中可见main()下的一个 ...

  10. React createRef:引用

    一 代码 import React, { Component } from 'react'; class Box extends Component { render() { return <b ...