在上文咱们获取文件的方式都是经过应用程序的三个跟目录的文件夹对象来获取文件夹对象和文件对象,那么咱们这一小节来说解一种新的获取文件对象的方式,这种方式就是经过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