[开发] Win8/Win8.1/WP8.1存取档案 (1)

楼主: hoyunxian (WildDagger)   2014-06-17 10:09:17
据说WP开发人员一直都是用System.IO.IsolateStorage(隔离储存区)来存取档案
就算WP8提供了和Win8同样的API也蛮少人用的?
(因为社团有人在问8.1找不到IsolateStorage所以顺手写了一篇)
简单说,就是WP8.1的API全面向Win8.1看齐,
所以过去有的System.IO.IsolateStorage命名空间API就被拿掉了
新的方式是利用Win8/WP8那时就有的Windows.Storage命名空间API
因为档案读写基本上是颇耗时的事情(档案越大读写就越久)
所以Win8.1的档案读写几乎无一例外都是异步方法
(在此简述一下异步方法,O'RELLY一本关于HTML5的书提到类似的WebWorker时,
用了个很生动的比喻,就是程式去找一个小工人帮他执行很耗时的工作,
工人们做完后就会把结果丢回去给主程式,主程式再用这结果去做事情,
在这途中主程式可以不用管工人继续做自己的事。
C#的异步方法也差不多,不过你并不需要用事件去捕捉回传结果(WebWorker要),
而是程式到那边的时候会自动先卡在那边等异步方法
(不是真的卡住,因为其他的程序方法还是会执行,
只是用到这个异步方法的程序会先停下来等异步方法把结果传回来)
在章老师的书中记得是有提到,
微软的API规定是肯定会超过几毫秒的方法就一定要写成异步方法,
因此主要是发生在网络API(你要等对方回应)、装置(如GPS定位)API(你要等装置回应)
与档案API(你要等系统回应)这三类上)
因为方法一模一样,Win8/Win8.1/WP8.1(其实WP8也可以)就不分开讲述了
基本上是以StorageFile(档案)/StorageFolder(资料夹)这两个为中心
(方法也几乎一模一样,只是StorageFile(理所当然的)不能建立新档案)
Win8/Win8.1/WP8/WP8.1的档案储存区资料夹分为五个,
可以用ApplicationData.Current的子物件来读取:
LocalFolder (本地资料夹)
简单说就是应用程式存资料的地方,通常是放程式必备的资料
Win8/Win8.1因为可以自由决定档案要放哪,必要性可能会少一点
不过WP8/WP8.1除了这个资料夹外就没地方能放不能删的档案了。
LocalSettings (本地端设定)
属于设定的类型,存取方式不一样
总之是放本地端不应该漫游的设定资料
像是登入APP必须的帐号密码就可以放在这边,不仅可以确保安全,
这样使用者也就不用每次开你的APP都要重新输入一次帐密(会很烦的)
(可惜WP8不支援)
RoamingFolder (漫游资料夹)
这边也是存资料的地方,但是有上限,
因为这个资料夹中的档案会被不定时传到微软的服务器去作同步
(但也正因为不定时,不见得能够马上就同步)
只要你有用相同的微软帐号登入的装置,系统就会自动帮你同步
算是很有用的一个功能
(WP8不能漫游所以这资料夹是不能用的)
RoamingSettings (漫游设定)
这边则是属于漫游类型的设定,存取方式与LocalSettings相同
你可以存一些比方说布景主题、我的最爱、书签之类个人化的设定,
这样子使用者不管用手机、平板还是PC开你的APP都会有相同的体验
(举个例子,为什么阅读清单可以各个装置同步就是透过这个功能)
(当然WP8也没办法用......)
TemporaryFolder (暂存资料夹)
属于程式执行会需要使用,不过删除也没什么大不了的档案
比方说编辑程式需要储存编辑到一半的档案时就会需要用这个
(不过WP8也不能用)
以MoPTT(阿扁大抱歉)来说
可能你读取的文章会暂存到TemporaryFolder、
你的PTT帐号密码会存到LocalSettings、
想要保存下来的文章就可以存到LocalFolder中
善加活用这五个子资料夹,程式开发就会很方便了
另外这些资料夹会放哪,
Win8/Win8.1会放在
C:\Users\(使用者名称)\AppData\Local\Packages\(APP的ID)\LocalState\中
WP8/WP8.1因为档案系统彻底黑箱化,所以就不知道了
(估计大概也是放C槽(手机)内)
......好像打了好长一串,实际操作换下一篇讲好了(默
作者: fireslayer (fireslayer)   2014-06-17 10:20:00
如果要写WP8也可以用的APP是不是用Isolate_系列比较好?
作者: hungys (hungys)   2014-06-17 14:39:00
WP8也可以用StorageFile吧,只是写久的人以前都用Isolated8.1应该是API权限更高

Links booklink

Contact Us: admin [ a t ] ucptt.com