天天看點

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

這一節開始我們将陸續看到uwp通用應用是如何擷取到檔案及檔案夾的屬性等資訊,以及如何寫入和讀取資料等,當然了最重要的還是如何儲存讀取和删除應用的資料。

首先我們在xaml中定義一個button和textblock,将讀取檔案/檔案夾名的過程寫在前者的click事件中,後者則用來顯示檔案資訊。

以下這段代碼,首先通過storagefolder類讀取圖檔庫,然後使用異步的方式将圖檔庫的檔案和檔案夾資訊載入相應的list中。建立一個stringbuilder用以儲存這些檔案的資訊,在這裡隻是使用了檔案/檔案夾的name屬性,但屬性還有很多,比如path屬性。最後再将這些擷取到的資訊指派給textblock即可。

注意要在方法名前面加上async哦。還有要在清單檔案中聲明我們的應用要使用圖檔庫哦,一會在windows phone中也一樣。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

背景代碼不用做任何修改,隻需把xaml代碼修改修改以适應螢幕即可~

就我個人而言,還是非常喜歡使用檔案選取器的,因為能夠用自己的代碼來調用系統的各種彈框。

在這個示例中,首先在xaml中添加一個button和一個textblock,分别命名為btnsavefile和tblocksaveinfo。對于這個儲存檔案這個操作在背景的click事件中就可以輕易完成了。

代碼中的下拉清單的檔案類型就是如下所示這個樣子喲。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

大部分的内容我都已經通過注釋的方式添加到代碼中了,至于filecontent的那段代碼到底是什麼意思,大家試試就知道了,我感覺蠻有意思的。3行代碼列出硬碟上所有檔案及檔案夾

如果大家試過打開這個bat檔案,有沒有覺得有趣呢?

更厲害的是,我們剛才所寫的代碼可以在windows phone上不經修改而直接使用。我的lumia 638已經刷上了windows 10預覽版,大家可以瞧瞧,全新的資料總管。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料
【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料
【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料
【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

和用檔案選取器儲存檔案相類似,打開檔案的邏輯都差不多。這個示例中同樣在xaml中定義一個名為btnopenfile的button和一個名為tblockopeninfo的textblock。

我已經将選取多個檔案的代碼也列了出來,隻需要取消注釋即可。像viewmode和filetypefilter這種屬性,看看名字應該都知道了吧。重在實踐。

在手機上也是通用的,剛才我試過了,成功進入了資料總管,不過沒能打開檔案。應該是因為預覽版的原因,這個預覽版連office都被移除了,估計會在下一版中添加通用版的office應用。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

在xaml中添加一個textblock用于顯示相關資訊,添加一個button來使用它的click事件,當然了,最後分别建立2個。

1.執行個體化storagefolder類

我們的檔案不可能讓其随意儲存在計算機/手機中的任何一個地方,應該先确定它的檔案夾,對吧?

在新的windows 8中,微軟開啟了windows上的app時代,下載下傳的軟體再也不能随意安裝到任何地方了,而是由作業系統統一放到一塊叫做“獨立存儲”的地方。這也是出于安全的考慮。用過windows phone 8的朋友應該更加清楚了。

那麼下面這行代碼的localfolder究竟在哪裡呢?

下圖中的檔案,就是我目前所寫的app。(補充一條哦,一開始我裝了win8後,下載下傳了一個遊戲,模拟類的,有金币呀什麼的,後來我找到這個app的檔案,将資料改了之後金币就嘩嘩的啦。當然了,對于其他單機而言這個完全不值一提,但app的資料,相信還有很多人沒有改過吧。)

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

那麼這張圖中的紅方框的檔案夾就是localfolder啦,下面還有一個存儲漫遊檔案的檔案夾。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

不論是讀取檔案還是寫入檔案,都得先确定一個檔案夾哦。

2.執行個體化storagefile

确定了檔案夾,就得确定檔案咯。對于建立檔案而言,執行以下代碼。既然用到了異步,在函數上加上async是必不可少的咯,這一點我們在前面講到過。後面的replaceexisting屬性是指的,如果該檔案(名)已經存在了,則替換它。

那麼對于讀取檔案呢,就直接讀取好啦。

3.建立和讀取檔案

将文本寫入檔案按照如下代碼,将檔案名和文本内容(字元串)。

讀取檔案也是類似的。

我們還可以将這個讀取的字元串傳遞給前面定義的textblock來加以調試。以下是完整的代碼。

同上。

3.将位元組寫入到檔案

a.建立緩沖區

b.将緩沖區中的位元組寫入到檔案

4.從檔案讀取位元組

a.将檔案加載到緩沖區

b.執行個體化datareader,讀取緩沖區

c.從datareader對象中讀取字元串

3.建立流,并異步地将file打開,使用可讀寫的方式

4.将文本寫入到檔案

a.使用using

b.(在using語句的花括号内)建立datawriter對象,并調用datawriter.writestring方法,将文本寫入到writestream中

c.将文本儲存到檔案中,并通過storeasync和flushasync方法存儲和關閉流

5.從檔案讀取文本

a.擷取該流的size

b.使用using

c.(在using語句的花括号内)建立datawriter對象,并調用loadasync方法,最後調用readstring即可。最後還可以将資訊輸出到textblock中。

這一節來看看擷取檔案屬性吧,可以擷取到檔案名、類型、最近通路時間等等屬性。

下面這段代碼呢,都很簡單。

在click事件中,先擷取到圖檔庫,當然了,你可以擷取其他地方,我電腦上的庫檔案中,就隻有文檔庫和圖檔庫有檔案了。然後建立一個檔案查詢,最後将這些檔案都賦給files。這裡的var可謂是非常的強大啊。執行個體化一個stringbuilder對象來輔助輸出資訊那真是太完美不過了,我們在前面也常用到它。

這樣一來就完成對name、filetype、size和datemodified屬性的擷取,但還有一類屬性,則比較難以擷取,它們就是“擴充屬性”。

最後将fileproperties傳遞給textblock即可。

最後調試app,就會像下圖一樣了。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

但是如你所見,檔案名太長了卻無法自動換行,而且資料也顯示不完整。改改xaml中的textblock即可。textwrapping屬性設定為wrap,則可以換行;将textblock添加到scrollviewer内則會顯示出一個滾動條。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

在前面的幾節中,都是關于資料的,這方面的内容其實還有很多很多,省略掉一部分後,也還是有很多。這一節是很重要的一部分,它關于如何儲存和讀取資料。

先來看看一個大概的背景吧,我這裡寫的很簡單啦。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

儲存的内容就是這四個框框裡填寫的資料咯。先上xaml代碼。

先來看看單個設定呗,下面就是代碼咯。

首先定義了兩個全局變量,如果看過前面幾篇文章,這個應該就非常清楚了。顧名思義,第一個是用來儲存本地設定的,第二個則是用來通路本地檔案夾的。這裡是單個設定地進行儲存的,後面還有2種方式。那麼就來調試吧,注意在點選了儲存資料按鈕之後把app關掉哦,關掉之後再加載,這樣才算是儲存了應用資料嘛,你說對不對呢?

以下就是我的測試結果了。

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

我們的設計都不用變,背景代碼修改如下。

使用applicationdatacompositevalue 會建立一個複合設定,通過代碼所示方式即可添加資料,最後會将其添加到localsettings中。

讀取資料的時候,同樣是先在localsettings中通過鍵值對的方式來取出這個複合設定。如果該設定為空,就會調用messagedialog控件彈窗通知沒有儲存資料。對于這個控件,可以通路這裡:【萬裡征程——windows app開發】控件大集合2。如果複合設定存在則将他們分别進行類型轉換後複制給相應的矩形的屬性。

在容器存放資料其實也就這麼回事啦,無非就是先建立一個容器,然後如果建立成功了,就在其中添加相應的資料即可。

至于加載資料,在這裡我使用了一個bool變量來檢查容器是不是已經建立好了,如果建立好了就可以将相應的資料取出然後指派了,如果沒有的話則一樣挑出彈窗。

接下來就來個運作的截圖咯,還有彈框的截圖^_^

【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料
【UWP通用應用開發】檔案選取器、擷取檔案屬性、寫入和讀取、儲存讀取和删除應用資料讀取檔案和檔案夾名檔案選取器寫入和讀取擷取檔案屬性儲存、讀取、删除應用資料

1.對于單個設定和複合設定

2.對于複合資料

删除操作并不難,有了這些,我們在做遊戲的時候,就可以将使用者對遊戲的設定都儲存下來;在做一些工具類的app時更是如此。

繼續閱讀