在上文咱們獲取文件的方式都是經過應用程序的三個跟目錄的文件夾對象來獲取文件夾對象和文件對象,那麼咱們這一小節來說解一種新的獲取文件對象的方式,這種方式就是經過Uri地址來獲取。應用程序存儲裏面的文件夾和文件其實和咱們平時在Windows電腦上看到的文件的目錄是同樣的,只不過它們是在存儲裏面,你並不能很直觀地看到他們的路徑,固然咱們仍是能夠經過StorageFile類的Path屬性來查看到文件的保存路徑,例如咱們查看一個在LocalFolder文件夾的testfile.txt文件的路徑會以下所示:html
C:\Data\Users\DefApps\APPDATA\Local\Packages\6c522da7-81ed-4463-b58a-584c89af115e_thbaz9fn8knhr\LocalState\testfile.txt微信
三個根目錄文件夾所對應的保存路徑的格式分別以下所示:app
(1)LocalFolder文件夾的保存路徑格式:dom
%USERPROFILE%\APPDATA \Local\Packages\{PackageId}\LocalStateasync
(2)RoamingFolder文件夾的保存路徑格式:spa
%USERPROFILE%\APPDATA \Local\Packages\{PackageId}\RoamingStatecode
(3)TemporaryFolder文件夾的保存路徑格式:xml
%USERPROFILE%\APPDATA \Local\Packages\{PackageId}\TempStatehtm
那本獲取到的這個路徑其實並不能做爲訪問文件的路徑來使用,訪問文件的路徑須要使用本地文件夾的ms-appdata的URI方案。LocalFolder文件夾對應的是「ms-appdata:///local/」,RoamingFolder文件夾對應的是「ms-appdata:///roaming/」,TemporaryFolder文件夾對應的是 「ms-appdata:///temp/」。咱們能夠經過StorageFile類的靜態方法GetFileFromApplicationUriAsync來根據URI讀取文件,下面的示例代碼是使用了ms-appdata的URI方案來獲取在LocalFolder文件夾裏面的AppConfigSettings.xml文件。對象
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/AppConfigSettings.xml"));
在這種經過URI訪問文件的方案裏面咱們還須要注意一個事情,那就是新文件和文件夾的路徑在 URI 方案名稱的最後一個斜槓後面不能超過 185 個字符。
下面給出經過URI讀取文件的示例:該示例演示了建立一個文件以後獲取其絕對的路徑,讀取文件的時候是經過URI方案讀取文件。
代碼清單6-6:經過URI讀取文件(源代碼:第6章\Examples_6_6)
MainPage.xaml文件主要代碼 ------------------------------------------------------------------------------------------------------------------ <StackPanel> <TextBox Header="文件信息:" x:Name="info" TextWrapping="Wrap"></TextBox> <Button x:Name="bt_save" Content="建立文件" Width="370" Click="bt_save_Click"></Button> <Button x:Name="bt_read" Content="經過Uri讀取文件" Width="370" Click="bt_read_Click"></Button> </StackPanel>
MainPage.xaml.cs文件主要代碼 ------------------------------------------------------------------------------------------------------------------ // 文件名 private string fileName = "testfile.txt"; // 建立文件 private async void bt_save_Click(object sender, RoutedEventArgs e) { if (info.Text != "") { // 獲取本地文件夾根目錄文件夾 IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder; // 在文件夾裏面建立文件,若是文件存在則替換掉 IStorageFile storageFile = await applicationFolder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists); // 使用FileIO類把字符串信息寫入文件 await FileIO.WriteTextAsync(storageFile, info.Text); await new MessageDialog("保存成功,文件的路徑:" + storageFile.Path).ShowAsync(); } else { await new MessageDialog("內容不能爲空").ShowAsync(); } } // 讀取文件 private async void bt_read_Click(object sender, RoutedEventArgs e) { // 讀取文件的文本信息 string text; try { // 經過Uri獲取本地文件 var storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/" + fileName)); // 打開文件獲取文件的數據流 IRandomAccessStream accessStream = await storageFile.OpenReadAsync(); // 使用StreamReader讀取文件的內容,須要將IRandomAccessStream對象轉化爲Stream對象來初始化StreamReader對象 using (StreamReader streamReader = new StreamReader(accessStream.AsStreamForRead((int)accessStream.Size))) { text = streamReader.ReadToEnd(); } } catch (Exception exce) { text = "文件讀取錯誤:" + exce.Message; } await new MessageDialog(text).ShowAsync(); }
本文來源於《深刻淺出Windows Phone 8.1 應用開發》
WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html
源代碼下載:http://vdisk.weibo.com/s/zt_pyrfNHb99O
歡迎關注個人微博@WP林政 微信公衆號:wp開發(號:wpkaifa)
WP8.1技術交流羣:372552293