[開發] 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