[源码下载]

重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性

作者:webabcd

介绍
重新想象 Windows 8.1 Store Apps 之文件系统的新特性

  • 简要说明 win8.1 中关于文件系统的增强
  • “库”管理
  • 管理以及使用索引

示例
1、简要说明 win8.1 中关于文件系统的增强
Demo.xaml

<Page
x:Class="Windows81.FileSystem.Demo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows81.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="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <TextBlock FontSize="14.667" Text="本例简要说明了 win8.1 中关于文件系统的增强,详见后台代码中的说明" Margin="0 10 0 0" /> </StackPanel>
</Grid>
</Page>

Demo.xaml.cs

/*
* 简要说明 win8.1 中关于文件系统的增强
*
*
* 关于文件系统和选择器的基础请见:
* http://www.cnblogs.com/webabcd/archive/2013/04/25/3041569.html
* http://www.cnblogs.com/webabcd/archive/2013/05/06/3062064.html
* http://www.cnblogs.com/webabcd/archive/2013/05/09/3068281.html
* http://www.cnblogs.com/webabcd/archive/2013/05/13/3075014.html
* http://www.cnblogs.com/webabcd/archive/2013/05/16/3081181.html
* http://www.cnblogs.com/webabcd/archive/2013/05/20/3087984.html
* http://www.cnblogs.com/webabcd/archive/2013/05/23/3094179.html
*/ using System;
using System.Collections.Generic;
using System.Linq;
using Windows.Storage;
using Windows.UI.Xaml.Controls; namespace Windows81.FileSystem
{
public sealed partial class Demo : Page
{
public Demo()
{
this.InitializeComponent(); Comment();
} private async void Comment()
{
// 1、在拆分屏幕状态下,打开文件选取器时,如果当前拆分屏有一定的宽度,则文件选取器会在当前拆分屏显示,而无需全屏显示 // 2、StorageFolder 和 StorageFile 都实现了 IStorageItem2 接口,其有一个 GetParentAsync() 方法用于获取当前 StorageFolder 或 StorageFile 的父文件夹
StorageFolder storageFolder = KnownFolders.DocumentsLibrary; // 在 win8.1 中访问 DocumentsLibrary 除了要添加 <Capability Name="documentsLibrary" /> 外,还要有相应的文件关联才行
IReadOnlyList<StorageFolder> folders = await storageFolder.GetFoldersAsync();
if (folders.Count > )
{
StorageFolder folder = folders.First();
StorageFolder parentFolder = await folder.GetParentAsync(); // 获取父亲文件夹(如果没有权限的话会返回 null)
lblMsg.Text = parentFolder.Name;
} // 3、StorageFolder 和 StorageFile 都实现了 IStorageItem2 接口,其有一个 IsEqual() 方法用于判断两个 IStorageItem2 是否相等
// 另外补充一个在 win8 中忘了写的一个知识点,判断一个 IStorageItem 是 StorageFolder 还是 StorageFile 可以通过 IsOfType(StorageItemTypes type) 方法来判断 // 4、KnownFolders 新增了两个属性,如下:
// KnownFolders.CameraRoll
// KnownFolders.Playlists // 5、新增了 StorageFolder.TryGetItemAsync(string name) 方法,不用再自己写 try catch 了(但是个别异常还是会抛出的,建议还是自己写帮助类吧)
// StorageFolder.TryGetItemAsync(string name) // 6、文件激活应用程序时,其事件参数 FileActivatedEventArgs 新增了 NeighboringFilesQuery 属性,用于获取激活文件附近的文件们 // 7、文件选择器中集成了 OneDrive
}
}
}

2、演示如何 添加/删除 “库”所包含的文件夹
StorageLibraryDemo.xaml

<Page
x:Class="Windows81.FileSystem.StorageLibraryDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows81.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="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <Button Name="btnAddFolder" Content="增加一个文件夹引用到图片库" Click="btnAddFolder_Click" Margin="0 10 0 0" /> <Button Name="btnRemoveFolder" Content="从图片库移除之前添加的全部文件夹引用" Click="btnRemoveFolder_Click" Margin="0 10 0 0" /> </StackPanel>
</Grid>
</Page>

StorageLibraryDemo.xaml.cs

/*
* 演示如何 添加/删除 “库”所包含的文件夹
*
* StorageLibrary - 用于“库”管理
* StorageLibrary.GetLibraryAsync(KnownLibraryId libraryId) - 静态方法,用于获取指定的“库”,返回 StorageLibrary 类型的对象
* Folders - 当前库所包含的文件夹们
* SaveFolder - 当前库的默认文件夹
* RequestAddFolderAsync() - 添加文件夹到当前库
* RequestRemoveFolderAsync() - 从当前库移除指定的文件夹
* DefinitionChanged - 当前库所包含的文件夹发生变化时触发的事件
*
*
* 关于文件系统和选择器的基础请见:
* http://www.cnblogs.com/webabcd/archive/2013/04/25/3041569.html
* http://www.cnblogs.com/webabcd/archive/2013/05/06/3062064.html
* http://www.cnblogs.com/webabcd/archive/2013/05/09/3068281.html
* http://www.cnblogs.com/webabcd/archive/2013/05/13/3075014.html
* http://www.cnblogs.com/webabcd/archive/2013/05/16/3081181.html
* http://www.cnblogs.com/webabcd/archive/2013/05/20/3087984.html
* http://www.cnblogs.com/webabcd/archive/2013/05/23/3094179.html
*/ using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows81.FileSystem
{
public sealed partial class StorageLibraryDemo : Page
{
// 临时保存添加进图片库的文件夹
private List<StorageFolder> _addedFloders = new List<StorageFolder>(); public StorageLibraryDemo()
{
this.InitializeComponent(); this.Loaded += StorageLibraryDemo_Loaded;
} async void StorageLibraryDemo_Loaded(object sender, RoutedEventArgs e)
{
// 注意:要想访问图片库,别忘了增加 <Capability Name="picturesLibrary" /> // 获取图片库的 StorageLibrary 对象
var picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures); // 当前库所包含的文件夹增多或减少时
picturesLibrary.DefinitionChanged += async (StorageLibrary innerSender, object innerEvent) =>
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
lblMsg.Text = "图片库所包含的文件夹如下:";
foreach (StorageFolder folder in picturesLibrary.Folders) // 当前库所包含的全部文件夹
{
lblMsg.Text += Environment.NewLine;
lblMsg.Text += folder.Path;
}
});
};
} // 增加一个文件夹引用到图片库
private async void btnAddFolder_Click(object sender, RoutedEventArgs e)
{
StorageLibrary picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures); // 弹出文件夹选择器,以选择需要添加到图片库的文件夹
StorageFolder addedFolder = await picturesLibrary.RequestAddFolderAsync();
if (addedFolder != null)
{
// 添加成功
_addedFloders.Add(addedFolder);
}
else
{ }
} // 从图片库移除之前添加的全部文件夹引用
private async void btnRemoveFolder_Click(object sender, RoutedEventArgs e)
{
StorageLibrary picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures); foreach (StorageFolder folder in _addedFloders)
{
// 从图片库移除指定的文件夹引用
if (await picturesLibrary.RequestRemoveFolderAsync(folder))
{
// 移除成功
}
else
{ }
}
}
}
}

3、演示如何管理索引器,以及如何通过索引器获取数据
Indexer.xaml

<Page
x:Class="Windows81.FileSystem.Indexer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows81.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="120 0 0 0"> <Button Name="btnAddToIndexer" Content="添加数据到索引器" Click="btnAddToIndexer_Click" /> <Button Name="btnRetrieveAllItems" Content="获取索引器中的全部数据" Click="btnRetrieveAllItems_Click" Margin="0 10 0 0" /> <Button Name="btnRetrieveMatchingItems" Content="按指定的查询条件获取索引器中的数据" Click="btnRetrieveMatchingItems_Click" Margin="0 10 0 0" /> <ScrollViewer Margin="0 10 0 0" Width="300" Height="400" HorizontalAlignment="Left">
<TextBlock Name="lblMsg" FontSize="14.667" />
</ScrollViewer> </StackPanel>
</Grid>
</Page>

Indexer.xaml.cs

/*
* 演示如何管理索引器,以及如何通过索引器获取数据
*
*
* 关于文件系统和选择器的基础请见:
* http://www.cnblogs.com/webabcd/archive/2013/04/25/3041569.html
* http://www.cnblogs.com/webabcd/archive/2013/05/06/3062064.html
* http://www.cnblogs.com/webabcd/archive/2013/05/09/3068281.html
* http://www.cnblogs.com/webabcd/archive/2013/05/13/3075014.html
* http://www.cnblogs.com/webabcd/archive/2013/05/16/3081181.html
* http://www.cnblogs.com/webabcd/archive/2013/05/20/3087984.html
* http://www.cnblogs.com/webabcd/archive/2013/05/23/3094179.html
*/ using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.Storage.Search;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows81.FileSystem
{
public sealed partial class Indexer : Page
{
public Indexer()
{
this.InitializeComponent();
} // 添加数据到索引器
private async void btnAddToIndexer_Click(object sender, RoutedEventArgs e)
{
// 获取一个索引器(可以指定索引器的名字,从而达到对索引器分类的目的)
var indexer = ContentIndexer.GetIndexer();
var content = new IndexableContent();
for (int i = ; i < ; i++)
{
content.Properties[SystemProperties.Title] = "Title: " + i.ToString().PadLeft(, '');
content.Properties[SystemProperties.Keywords] = "Keywords: " + i.ToString().PadLeft(, ''); // 多个用“;”隔开
content.Properties[SystemProperties.Comment] = "Comment: " + i.ToString().PadLeft(, '');
content.Id = "key" + i; // 标识,增加同标识的索引就是更新 // 增加一个索引(另外还有 Update 和 Delete 操作)
await indexer.AddAsync(content);
}
} // 获取索引器中的全部数据
private void btnRetrieveAllItems_Click(object sender, RoutedEventArgs e)
{
ExecuteQueryHelper("*");
} // 按指定的查询条件获取索引器中的数据
private void btnRetrieveMatchingItems_Click(object sender, RoutedEventArgs e)
{
ExecuteQueryHelper("title:\"99\"");
} // 按指定的 AQS 语法从索引器中查询数据
private async void ExecuteQueryHelper(string queryString)
{
lblMsg.Text = "";
var indexer = ContentIndexer.GetIndexer(); string[] propertyKeys =
{
SystemProperties.Title,
SystemProperties.Keywords,
SystemProperties.Comment
};
// 通过 AQS 语法创建一个查询,关于 AQS 请参见:http://msdn.microsoft.com/zh-cn/library/windows/apps/aa965711.aspx
var query = indexer.CreateQuery(queryString, propertyKeys); // 执行查询,并获取结果
var documents = await query.GetAsync();
foreach (var document in documents)
{
string itemString = "Key: " + document.Id + "\n";
foreach (var propertyKey in propertyKeys)
{
itemString += propertyKey + ": " + StringifyProperty(document.Properties[propertyKey]) + "\n";
}
lblMsg.Text += itemString + "\n";
}
} // 如果对象是一个字符串集合则用“;”做分隔符,然后以字符串形式输出
public string StringifyProperty(object property)
{
string propertyString = "";
if (property != null)
{
var vectorProperty = property as IEnumerable<string>;
if (vectorProperty != null)
{
foreach (var prop in vectorProperty)
{
propertyString += prop + "; ";
}
}
else
{
propertyString = property.ToString();
}
}
return propertyString;
}
}
}

OK
[源码下载]

重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性的更多相关文章

  1. 重新想象 Windows 8.1 Store Apps (84) - 图像处理的新特性, Share Contract 的新特性

    [源码下载] 重新想象 Windows 8.1 Store Apps (84) - 图像处理的新特性, Share Contract 的新特性 作者:webabcd 介绍重新想象 Windows 8. ...

  2. 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient

    [源码下载] 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient 作者:webabcd 介绍重新想象 Windows 8.1 Store ...

  3. 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

    [源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  4. 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cookie 读写; 自定义 HttpFilter; 其他

    [源码下载] 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cooki ...

  5. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

    [源码下载] 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 作者:webabcd 介 ...

  6. 重新想象 Windows 8.1 Store Apps 系列文章索引

    [源码下载] [重新想象 Windows 8 Store Apps 系列文章] 重新想象 Windows 8.1 Store Apps 系列文章索引 作者:webabcd 1.重新想象 Windows ...

  7. 重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性

    [源码下载] 重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性 作者:webabcd 介绍重新想象 Windows 8.1 Store Ap ...

  8. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  9. 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar

    [源码下载] 重新想象 Windows 8.1 Store Apps (72) - 新增控件: AppBar, CommandBar 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

随机推荐

  1. 彩色的Shell

    我常在命令行下工作,以前老被同事说"你整天在那个黑窗口上倒腾什么?" 现在这个问题变成了"你这个花花绿绿的窗口是什么东西?" 其实都是同一个东西:一个兼容于xterm的终端窗口,要么是PuTTY/Ki ...

  2. 机器学习(Machine Learning)&深度学习(Deep Learning)资料

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  3. assets中放入中文文件名导致Android Studio编译错误

    一个android项目突然出现编译错误,如下: :app:processDebugResources FAILED FAILURE: Build failed with an exception. * ...

  4. 对已经add的文件不在跟踪

    记录每次更新到仓库 现在我们手上已经有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝.接下来,对这些文件作些修改,在完成了一个阶段的目标之后,提交本次更新到仓库. 请记住,工作 ...

  5. truncate/drop表非常慢,怎么办?用硬链接,极速体验

    这个这个,我必须花巨大篇幅,记录下今天清空表记录的英雄壮举,可知道一个drop操作,执行了一下午啊一下午,这是要急出翔的节奏..呵呵,下面开始 我的需求:某表因历史原因,积压了1亿条记录,约占360G ...

  6. Oracle数据库入门——物化视图日志结构

    物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途. 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当 ...

  7. GET到新技能,SharpCEF,C#和JS的互相调用

    winform程序内嵌谷歌浏览器,使用大名鼎鼎的“SharpCEF”.这里科普一下: CEF是什么 CEF是Chromium Embedded Framework的缩写,是个基于Google Chro ...

  8. 使用GROUP BY统计记录条数 COUNT(*) DISTINCT

    例如这样一个表,我想统计email和passwords都不相同的记录的条数 CREATE TABLE IF NOT EXISTS `test_users` ( `email_id` ) unsigne ...

  9. HIS系统的处方录入控件

    前文<EFW框架Winform前端开发之强大的自定义控件库>中我们介绍了EFW框架中Winform系统中的自定义控件,本章使用自定义控件中的GridBoxCard控件开发了一个HIS系统的 ...

  10. visual studio 2012 has stopped working

    I had similar problem which was resolved by taking two steps : 1A. DELETE THE REGISTRY KEY : 32-bit ...