WP8.1 Study12:文件压缩与Known Folder(包含SD卡操作)
一、文件压缩
当应用程序保存和加载数据,它可以使用压缩。
1、使用 Windows.Storage.Compression.Compressor 压缩,获得一个Compressor stream。
var s = await destFile.OpenAsync(FileAccessMode.ReadWrite);
Compressor compressor =
new Compressor(s.GetOutputStreamAt(), CompressAlgorithm.Mszip, );
其中,Mszip是压缩算法之一,我们还可以用Xpress、XpressHuff、Lzms算法压缩。0,表示使用默认的压缩块的大小。
2、解压使用Decompressor
二、Known Folder
KnownFolders是一个API,简化了开发人员的访问手机上的用户数据。在KnownFolders中包括设备上的SD卡(如果已插入)上的文件,而且在KnownFolders上的文件是所有APP共同拥有的。
1、KnownFolders 视图(例子)

2、获取用户的数据
KnownFolders提供方法获取手机上的图片、视频、音乐,比如获取手机上的图片,代码如下:
var pictures = await Windows.Storage.KnownFolders.PicturesLibrary.GetFilesAsync();
3、使用SD卡
App可以读写文件到SD卡中,而且这使得能够应用到在彼此之间共享数据。由于SD卡代表了一个“共享”资源,应用程序必须在manifest申请它想访问的文件类型关联。
(1)准备
让一个App有能力使用SD卡,是需要事先设置一些功能。

要把Removable Storage 功能打勾,如果你需要使用KnownFolder API,可能你要把Picture Library等功能打开。
(2)为程序关联想要访问文件的类型
在manifest中,为应用程序指定一个与它关联的文件类型,这样程序才能打开这种类型的文件,如图所示
(这个程序使.txt格式文件与之关联)
(3)获取SD卡操作
var devices = Windows.Storage.KnownFolders.RemovableDevices;
var sdCards = await devices.GetFoldersAsync();
if (sdCards.Count == ) return;
var firstCard = sdCards[];//firtCard是sd卡的根目录,可以在上面创建文件夹及文件
Note:我们可以在模拟器模拟SD卡操作,方法是打开WP8.1模拟器的工具面板,在sd卡界面模拟插入sd卡(同时也可以弹出sd卡),如下图

(4)例子
在sd卡上读取写入文件的完整方法。
写:
private async void writeCustomersToSDCard(string foldername, string filename, Customers customers)
{
var devices = Windows.Storage.KnownFolders.RemovableDevices; var sdCards = await devices.GetFoldersAsync(); if (sdCards.Count == ) return; var firstCard = sdCards[]; StorageFolder notesFolder = await firstCard.CreateFolderAsync(foldername, CreationCollisionOption.OpenIfExists); Stream stream = await notesFolder.OpenStreamForWriteAsync(filename, CreationCollisionOption.ReplaceExisting); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Customers)); serializer.WriteObject(stream, customers); await stream.FlushAsync(); stream.Dispose();
}
读:
private async Task<Customers> readCustomersFromSDCard(string foldername, string filename)
{
var devices = Windows.Storage.KnownFolders.RemovableDevices; var sdCards = await devices.GetFoldersAsync(); if (sdCards.Count == ) return null; var firstCard = sdCards[]; StorageFolder notesFolder = await firstCard.GetFolderAsync(foldername); Stream stream = await notesFolder.OpenStreamForReadAsync(filename); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Customers)); Customers result = serializer.ReadObject(stream) as Customers; stream.Dispose(); return result;
}
WP8.1 Study12:文件压缩与Known Folder(包含SD卡操作)的更多相关文章
- android:http下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- Android——FileOutputStream与openFileOutput()的区别分析【第一个用于文件存储,第二个用于SD卡存储】【转】
本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...
- Android HTTP下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- shell命令:给当前目录里一个文件压缩一份不包含.svn文件的zip包
filepath=$(cd ")"; pwd) packagePath="$filepath"/package zipPath="$filepath& ...
- Android 读写SD卡的文件
今天介绍一下Android 读写SD卡的文件,要读写SD卡上的文件,首先需要判断是否存在SD卡,方法: Environment.getExternalStorageState().equals(Env ...
- android学习笔记47——读写SD卡上的文件
读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...
- 转-Android 之 使用File类在SD卡中读取数据文件
如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码: <!-- 在sd中创建和删除文件的权限 --> ...
- 安卓培训第五天---上传文件SD卡
有关如何将文件上传到先说说SD卡: package com.example.lesson05_02; import java.io.File; import java.io.FileNotFoundE ...
- android 操作SD卡上的文件
(1)说明:操作SD卡上的文件须要增加下面权限 在SD卡上创建和删除文件权限 <uses-permission android:name="android.permission.M ...
随机推荐
- uva 11324 The Largest Clique
vjudge 上题目链接:uva 11324 scc + dp,根据大白书上的思路:" 同一个强连通分量中的点要么都选,要么不选.把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它 ...
- hdu 5339 Untitled
这题很明显是签到题,可我比赛时却没做出,赤裸裸的爆零了,真悲剧…… 看了题解后才知道直接暴搜就行,只是需要把它们从大到小排序后再搜,我当时就没想到...不想再多说了 一开始我直接枚举所有情况: #in ...
- go分页
简单的beego分页功能代码 一个简单的beego分页小插件(源代码在最下面): 支持条件查询 支持参数保留 支持自定义css样式 支持表/视图 支持参数自定义 默认为pno 支持定义生成链接的个数 ...
- CentOS查看CPU、内存、网络流量和磁盘 I/O【转载,待整理】
http://blog.csdn.net/zbyufei/article/details/6413273
- 原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法
网上看了好多java直接打印一个对象时,直接调用该类的toString方法 . 但是: Object obj=null; System.out.println(obj);//没有报错 System.o ...
- 转!论if else与switch的效率高低问题
转 下面来详细描述switch与ifelse的区别. switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转 ...
- JSON和JSONP区别和联系
由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯 ...
- 【转】 简单理解Socket
题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...
- Qt之加载QSS文件
简述 Qt中关于样式的使用很常见,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种部件(例如:QLable.QLineEdit.QPushButton)的样式,最后使用QA ...
- (12)odoo各种提前期和时间
1)Product的提前期 Customer Lead Time(sale_delay):客户提前期,指SO确认到向客户发货的天数,由于销售数量不同该时间也不同,因此,这里是一个平均时间. ...