[源码下载]

背水一战 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. 14-background

    一.background-color:设置该元素的背景颜色 一共有三种:单词.rgb表示法.十六进制表示法 1.rgb:红色 绿色 蓝色 三原色 光学显示器,每个像素都是由三原色的发光原件组成的,靠明 ...

  2. ARC下野指针 EXC_BAD_ACCESS错误

    一般都是多线程造成的,某一个线程在操作一个对象时,另一个线程将此对象释放,此时就有可能造成野指针的问题.一种解决办法是如果都是UI操作则将这些操作都放在主线程去执行. 通常出现此问题的地方都在RAC, ...

  3. HTML-全局属性 / 事件属性(转)

    拷贝自:< http://www.runoob.com > HTML 全局属性 New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规 ...

  4. ansible 问题

    如下图,A服务器上用普通账号ansible有时就会报错,但有时却又正常,可以连接成功,用root账号执行ansible就完全没问题. 仅仅是这一台服务器有问题,其他都完全正常..ansible 文件删 ...

  5. 资产管理平台 glpi

    1.安装apache yum install httpdyum install httpd-devel 2.安装php 3.配置apache支持php 4.下载glpi并解压 5.配置apache 6 ...

  6. Linux网络编程学习(六) ----- 管道(第四章)

    1.管道的定义 管道就是将一个程序的输出和另外一个程序的输入连接起来的单向通道,比如命令: ls -l|more,就建立了一个管道,获取ls -l的输出作为more的输入,数据就沿着管道从管道的左边流 ...

  7. Linux Oracle安装

    lsnrctl status  // 查看linux系统oracle的监听状态lsnrctl start   // 启动linux系统oracle的监听状态 sqlplus /nolog  // 连接 ...

  8. 云笔记项目-笔记列表弹出"分享移动删除"子菜单

    业务需求: 笔记列表里还有一个按钮可以弹出子菜单,要求做到以下几点: (1)点击选中的笔记行的弹出按钮后,弹出子菜单,再次点击,子菜单收回. (2)选中其他笔记后,子菜单消失.效果如下图所示: 业务分 ...

  9. 语义分割之Dual Attention Network for Scene Segmentation

    Dual Attention Network for Scene Segmentation 在本文中,我们通过 基于自我约束机制捕获丰富的上下文依赖关系来解决场景分割任务.       与之前通过多尺 ...

  10. 十一 hashlib模块

    # 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的 ...