博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件...
阅读量:6218 次
发布时间:2019-06-21

本文共 12723 字,大约阅读时间需要 42 分钟。

原文:

重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件

作者:
介绍
重新想象 Windows 8 Store Apps 之 文件系统

  • File Access - 访问文件夹和文件,以及获取文件的各种属性
  • Folder Access - 遍历文件夹时的一些特殊操作
  • Thumbnail Access - 获取文件的缩略图
  • AQS - 通过 AQS(Advanced Query Syntax)搜索本地文件

示例
1、演示如何访问文件夹和文件,以及如何获取文件的各种属性
FileSystem/FileAccess.xaml

FileSystem/FileAccess.xaml.cs

/* * 演示如何访问文件夹和文件,以及如何获取文件的各种属性 *  * StorageFolder - 文件夹操作类 *     获取文件夹相关属性、重命名、Create...、Get...等 *  * StorageFile - 文件操作类 *     获取文件相关属性、重命名、Create...、Get...、Copy...、Move...、Delete...、Open...、Replace...等 *      * 注:WinRT 中的关于存储操作的相关类都在 Windows.Storage 命名空间内 */using System;using System.Collections.Generic;using Windows.Storage;using Windows.Storage.FileProperties;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Navigation;using System.Linq;namespace XamlDemo.FileSystem{    public sealed partial class FileAccess : Page    {        public FileAccess()        {            this.InitializeComponent();        }        protected async override void OnNavigatedTo(NavigationEventArgs e)        {            // 遍历“文档库”目录下的所有顶级文件(需要在 Package.appxmanifest 中选中“文档库”功能)            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;            IReadOnlyList
files = await storageFolder.GetFilesAsync(); listBox.ItemsSource = files.Select(p => p.Name).ToList(); } private async void listBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e) { // 获取用户选中的文件 string fileName = (string)listBox.SelectedItem; StorageFolder storageFolder = KnownFolders.DocumentsLibrary; StorageFile storageFile = await storageFolder.GetFileAsync(fileName); // 显示文件的各种属性 if (storageFile != null) { lblMsg.Text = "Name:" + storageFile.Name; lblMsg.Text += Environment.NewLine; lblMsg.Text += "FileType:" + storageFile.FileType; lblMsg.Text += Environment.NewLine; BasicProperties basicProperties = await storageFile.GetBasicPropertiesAsync(); lblMsg.Text += "Size:" + basicProperties.Size; lblMsg.Text += Environment.NewLine; lblMsg.Text += "DateModified:" + basicProperties.DateModified; lblMsg.Text += Environment.NewLine; /* * 获取文件的其它各种属性 * 详细属性列表请参见:http://msdn.microsoft.com/en-us/library/windows/desktop/ff521735(v=vs.85).aspx */ List
propertiesName = new List
(); propertiesName.Add("System.DateAccessed"); propertiesName.Add("System.DateCreated"); propertiesName.Add("System.FileOwner"); IDictionary
extraProperties = await storageFile.Properties.RetrievePropertiesAsync(propertiesName); lblMsg.Text += "System.DateAccessed:" + extraProperties["System.DateAccessed"]; lblMsg.Text += Environment.NewLine; lblMsg.Text += "System.DateCreated:" + extraProperties["System.DateCreated"]; lblMsg.Text += Environment.NewLine; lblMsg.Text += "System.FileOwner:" + extraProperties["System.FileOwner"]; } } }}

2、演示遍历文件夹时的一些特殊操作
FileSystem/FolderAccess.xaml

FileSystem/FolderAccess.xaml.cs

/* * 演示遍历文件夹时的一些特殊操作 * 1、演示如何对 StorageFolder 中的内容做分组 * 2、演示如何通过文件扩展名过滤内容,以及如何从 Prefetch 中获取数据 *  * StorageFolder - 文件夹操作类 *     获取文件夹相关属性、重命名、Create...、Get...等 *  * StorageFile - 文件操作类 *     获取文件相关属性、重命名、Create...、Get...、Copy...、Move...、Delete...、Open...、Replace...等 *      * 注:WinRT 中的关于存储操作的相关类都在 Windows.Storage 命名空间内 */using System;using System.Collections.Generic;using Windows.Storage;using Windows.Storage.FileProperties;using Windows.Storage.Search;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Navigation;namespace XamlDemo.FileSystem{    public sealed partial class FolderAccess : Page    {        public FolderAccess()        {            this.InitializeComponent();        }        // 演示如何对 StorageFolder 中的内容做分组        private async void btnGroupFile_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)        {            lblMsg.Text = "";            StorageFolder picturesFolder = KnownFolders.PicturesLibrary;            // 创建一个按月份分组的查询            QueryOptions queryOptions = new QueryOptions(CommonFolderQuery.GroupByMonth);            // 对指定文件夹执行指定的文件夹查询,返回分组后的文件夹数据            StorageFolderQueryResult queryResult = picturesFolder.CreateFolderQueryWithOptions(queryOptions);            IReadOnlyList
folderList = await queryResult.GetFoldersAsync(); foreach (StorageFolder folder in folderList) // 这里的 floder 就是按月份分组后的月份文件夹(当然,物理上并没有月份文件夹) { IReadOnlyList
fileList = await folder.GetFilesAsync(); lblMsg.Text += folder.Name + " (" + fileList.Count + ")"; lblMsg.Text += Environment.NewLine; foreach (StorageFile file in fileList) // 月份文件夹内的文件 { lblMsg.Text += " " + file.Name; lblMsg.Text += Environment.NewLine; } } } // 演示如何通过文件扩展名过滤内容,以及如何从 Prefetch 中获取数据 private async void btnPrefetchAPI_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e) { /* * Prefetch 是预读的文件信息,其在 C:\Windows\Prefetch 目录内,可以从中获取文件属性信息和文件缩略图,在访问大量文件的场景下可以提高效率 */ lblMsg.Text = ""; List
fileTypeFilter = new List
(); fileTypeFilter.Add(".jpg"); fileTypeFilter.Add(".png"); // 新建一个查询,指定需要查询的文件的扩展名 QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderByName, fileTypeFilter); // 通过 QueryOptions.SetPropertyPrefetch() 来设置需要从 Prefetch 中获取的属性信息 List
propertyNames = new List
(); propertyNames.Add("System.FileOwner"); queryOptions.SetPropertyPrefetch(PropertyPrefetchOptions.ImageProperties, propertyNames); /* * 通过 QueryOptions.SetThumbnailPrefetch() 来设置需要从 Prefetch 中获取的缩略图 uint requestedSize = 190; ThumbnailMode thumbnailMode = ThumbnailMode.PicturesView; ThumbnailOptions thumbnailOptions = ThumbnailOptions.UseCurrentScale; queryOptions.SetThumbnailPrefetch(thumbnailMode, requestedSize, thumbnailOptions); */ // 对指定文件夹执行指定的文件查询,返回查询后的文件数据 StorageFileQueryResult queryResult = KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions); IReadOnlyList
fileList = await queryResult.GetFilesAsync(); foreach (StorageFile file in fileList) { lblMsg.Text += file.Name; // 文件名 // 获取图像属性 ImageProperties properties = await file.Properties.GetImagePropertiesAsync(); lblMsg.Text += "(" + properties.Width + "x" + properties.Height + ")"; // 获取其他属性(详细属性列表请参见:http://msdn.microsoft.com/en-us/library/windows/desktop/ff521735(v=vs.85).aspx) IDictionary
extraProperties = await file.Properties.RetrievePropertiesAsync(propertyNames); lblMsg.Text += "(" + extraProperties["System.FileOwner"] + ")"; // 获取缩略图 // StorageItemThumbnail thumbnail = await file.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions); } } }}

3、演示如何获取文件的缩略图
FileSystem/ThumbnailAccess.xaml

FileSystem/ThumbnailAccess.xaml.cs

/* * 演示如何获取文件的缩略图 *  * 获取指定文件或文件夹的缩略图,返回 StorageItemThumbnail 类型的数据 * StorageFile.GetThumbnailAsync(ThumbnailMode mode, uint requestedSize, ThumbnailOptions options) * StorageFolder.GetThumbnailAsync(ThumbnailMode mode, uint requestedSize, ThumbnailOptions options) *     ThumbnailMode mode - 用于描述缩略图的目的,以使系统确定缩略图图像的调整方式(PicturesView, VideosView, MusicView, DocumentsView, ListView, SingleItem) *         关于 ThumbnailMode 的详细介绍参见:http://msdn.microsoft.com/en-us/library/windows/apps/hh465350.aspx *     uint requestedSize - 期望尺寸的最长边长的大小 *     ThumbnailOptions options - 检索和调整缩略图的行为(None, ReturnOnlyIfCached, ResizeThumbnail, UseCurrentScale) */using System;using Windows.Storage;using Windows.Storage.FileProperties;using Windows.Storage.Pickers;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Media.Imaging;namespace XamlDemo.FileSystem{    public sealed partial class ThumbnailAccess : Page    {        public ThumbnailAccess()        {            this.InitializeComponent();        }        private async void btnGetThumbnail_Click_1(object sender, RoutedEventArgs e)        {            if (XamlDemo.Common.Helper.EnsureUnsnapped())            {                FileOpenPicker openPicker = new FileOpenPicker();                openPicker.FileTypeFilter.Add("*");                StorageFile file = await openPicker.PickSingleFileAsync();                if (file != null)                {                       ThumbnailMode thumbnailMode = ThumbnailMode.PicturesView;                    ThumbnailOptions thumbnailOptions = ThumbnailOptions.UseCurrentScale;                    uint requestedSize = 200;                    using (StorageItemThumbnail thumbnail = await file.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions))                     {                        if (thumbnail != null)                        {                            BitmapImage bitmapImage = new BitmapImage();                            bitmapImage.SetSource(thumbnail);                            img.Source = bitmapImage;                            lblMsg.Text = "file name: " + file.Name;                            lblMsg.Text += Environment.NewLine;                            lblMsg.Text += "requested size: " + requestedSize;                            lblMsg.Text += Environment.NewLine;                            lblMsg.Text += "returned size: " + thumbnail.OriginalWidth + "*" + thumbnail.OriginalHeight;                        }                    }                }            }        }    }}

4、演示如何通过 AQS - Advanced Query Syntax 搜索本地文件
FileSystem/AQS.xaml.cs

/* * 演示如何通过 AQS - Advanced Query Syntax 搜索本地文件 */using System;using System.Collections.Generic;using Windows.Storage;using Windows.Storage.BulkAccess;using Windows.Storage.FileProperties;using Windows.Storage.Search;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Navigation;namespace XamlDemo.FileSystem{    public sealed partial class AQS : Page    {        public AQS()        {            this.InitializeComponent();        }        protected async override void OnNavigatedTo(NavigationEventArgs e)        {            // 准备在“音乐库”中进行搜索(需要在 Package.appxmanifest 的“功能”中选中“音乐库”)            StorageFolder musicFolder = KnownFolders.MusicLibrary;            // 准备搜索所有类型的文件            List
fileTypeFilter = new List
(); fileTypeFilter.Add("*"); // 搜索的查询参数 QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderByDate, fileTypeFilter); // 指定 AQS 字符串,参见 http://msdn.microsoft.com/zh-cn/library/windows/apps/aa965711.aspx queryOptions.UserSearchFilter = "五月天"; // 根据指定的参数创建一个查询 StorageFileQueryResult fileQuery = musicFolder.CreateFileQueryWithOptions(queryOptions); lblMsg.Text = "在音乐库中搜索“五月天”,结果如下:"; lblMsg.Text += Environment.NewLine; // 开始搜索,并返回检索到的文件列表 IReadOnlyList
files = await fileQuery.GetFilesAsync(); if (files.Count == 0) { lblMsg.Text += "什么都没搜到"; } else { foreach (StorageFile file in files) { lblMsg.Text += file.Name; lblMsg.Text += Environment.NewLine; } } // 关于 QueryOptions 的一些用法,更详细的 QueryOptions 的说明请参见 msdn queryOptions = new QueryOptions(); queryOptions.FolderDepth = FolderDepth.Deep; queryOptions.IndexerOption = IndexerOption.UseIndexerWhenAvailable; queryOptions.SortOrder.Clear(); var sortEntry = new SortEntry(); sortEntry.PropertyName = "System.FileName"; sortEntry.AscendingOrder = true; queryOptions.SortOrder.Add(sortEntry); fileQuery = KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions); } }}

OK

转载地址:http://ozoja.baihongyu.com/

你可能感兴趣的文章
【编程题目】n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始
查看>>
android LinearLayout添加分隔线
查看>>
WinForm TextBox自定义扩展方法数据验证
查看>>
pthread_exit
查看>>
16、编写适应多个API Level的APK
查看>>
《深入浅出数据分析》-利用Excel的Solver求橡皮玩具的最大利润
查看>>
hdu----(2586)How far away ?(DFS/LCA/RMQ)
查看>>
jQuery数组处理汇总
查看>>
Unity 导出切片精灵
查看>>
PopupWindwo和AlertDialog的区别
查看>>
SQL Server 中可以被锁住的 12 种资源
查看>>
CMD获取当前目录的绝对路径 (转)
查看>>
C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》
查看>>
SSAS多维数据集以及维度的建立
查看>>
c++ String去除头尾空格
查看>>
SICP的一些个人看法
查看>>
C#中的yield
查看>>
如何锻炼小孩的智力
查看>>
SpringBatch的初步了解
查看>>
window下删除所有带.svn文件夹及文件,删除所有的.svn文件夹
查看>>