6.2.4 应用文件的URI方案

在上文我们获取文件的方式都是通过应用程序的三个跟目录的文件夹对象来获取文件夹对象和文件对象,那么我们这一小节来讲解一种新的获取文件对象的方式,这种方式就是通过Uri地址来获取。应用程序存储里面的文件夹和文件其实和我们平时在Windows电脑上看到的文件的目录是一样的,只不过它们是在存储里面,你并不能很直观地看到他们的路径,当然我们还是可以通过StorageFile类的Path属性来查看到文件的保存路径,例如我们查看一个在LocalFolder文件夹的testfile.txt文件的路径会如下所示:

C:\Data\Users\DefApps\APPDATA\Local\Packages\6c522da7-81ed-4463-b58a-584c89af115e_thbaz9fn8knhr\LocalState\testfile.txt

三个根目录文件夹所对应的保存路径的格式分别如下所示:

(1)LocalFolder文件夹的保存路径格式:

%USERPROFILE%\APPDATA \Local\Packages\{PackageId}\LocalState

(2)RoamingFolder文件夹的保存路径格式:

%USERPROFILE%\APPDATA \Local\Packages\{PackageId}\RoamingState

(3)TemporaryFolder文件夹的保存路径格式:

%USERPROFILE%\APPDATA \Local\Packages\{PackageId}\TempState

那本获取到的这个路径其实并不能作为访问文件的路径来使用,访问文件的路径需要使用本地文件夹的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

[深入浅出WP8.1(Runtime)]应用文件的URI方案的更多相关文章

  1. [深入浅出WP8.1(Runtime)]生成图片和存储生成的图片文件

    7.2.3 使用RenderTargetBitmap类生成图片 RenderTargetBitmap类可以将可视化对象转换为位图,也就是说它可以将任意的UIElement以位图的形式呈现.那么我们在实 ...

  2. [深入浅出WP8.1(Runtime)]Windows Phone 8.1和Silverlight 8.1的区别

    1.2.2 Windows Phone 8.1应用程序模型 Windows Phone 8.1支持多种开发语言来开发应用程序,包括C#.VB.JavaScript和C++,那么本书的代码主要是采用C# ...

  3. [深入浅出WP8.1(Runtime)]网络编程之HttpClient类

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  4. [深入浅出WP8.1(Runtime)]数据绑定的基础

    11.1 数据绑定的基础 数据绑定是一种XAML界面和后台数据通信的方式,因为界面和后台数据的通信的场景有多种,并且数据于数据之间也存在着不一样的关联关系,所以数据绑定的实现技巧和方式也是多种多样的. ...

  5. [深入浅出WP8.1(Runtime)]应用实例——移动截图

    10.2应用实例——移动截图 移动截图例子是实现一个把一张图片的某个部分截取出来的功能,并且用户可以选定截取的图片区间.那个该例子会使用ManipulationDelta事件来实现对截取区间的选择.然 ...

  6. [深入浅出WP8.1(Runtime)]Toast通知

    9.1 Toast通知 Toast通知是在屏幕最顶上弹出来的临时通知,是Windows Phone通用的弹出式短暂的通知,默认的系统消息都是采用Toast通知的形式,比如当你手机收到短信的时候,在手机 ...

  7. [深入浅出WP8.1(Runtime)]浮出控件(Flyout)

    4.15 浮出控件(Flyout) 浮出控件(Flyout)是一个轻型的辅助型的弹出控件,通常会作为提示或者要求用户进行相关的交互来使用.Flyout控件与Windows Phone里面的弹出框Mes ...

  8. [深入浅出WP8.1(Runtime)]文本框(TextBox)

    4.4 文本框(TextBox) 文本框(TextBox)控件是表示一个可用于显示和编辑单格式.多行文本的控件.TextBox控件常用于在表单中编辑非格式化文本,例如,如果一个表单要求输入用户姓名.电 ...

  9. [深入浅出WP8.1(Runtime)]文本块(TextBlock)

    4.3 文本块(TextBlock) 文本块(TextBlock)控件是用于显示少量文本的轻量控件,可以通过TextBlock呈现只读的文本,你可以把TextBlock控件理解为一种纯文本的展示控件. ...

随机推荐

  1. Linux安装mysql最新版本纪要

    http://blog.csdn.net/frt007/article/details/50184143 http://blog.csdn.net/wb96a1007/article/details/ ...

  2. 与你相遇好幸运,Sail.js创建.sailsrc文件

    在项目根目录下创建.sailsrc文件 {  "generators": {    "modules": {}  },  "hooks": ...

  3. eclipse基础及开发插件

    Eclipse:http://www.eclipse.org/downloads/ Compare Package:http://www.eclipse.org/downloads/packages/ ...

  4. HP SAN Switch光纖交換機命令行畫zone

    有時候我們無法登陸網頁交互界面去操縱交換機,如下提供了命令行方式從交換機劃zone 1.創建別名 alicreate "SummaryDB_N", "211,14; 21 ...

  5. 深入剖析iLBC的丢包补偿技术(PLC)

    转自:http://blog.csdn.net/wanggp_2007/article/details/5136609 丢包补偿技术(Packet Loss Concealment——PLC)是iLB ...

  6. Ubuntu下安装Nginx

    转载自:http://www.cnblogs.com/skynet/p/4146083.html 1.Nginx安装 我使用的环境是64位 Ubuntu 14.04, Nginx是Nginx 1.10 ...

  7. php随机生成验证码

    我们经常需要服务器向前端发送验证码,验证码需要随机产生,下面的用简单的代码实现了这一过程: <?php $pool='0123456789abcdefghijklmnopqrstuvwxyzAB ...

  8. 库函数系统调用文件方式,王明学learn

    库函数系统调用文件方式 基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows.Linux还是其他的操作系统中,都是使用这些函数.使用库函数进行程序设计可提高程序的可移植性. 对于 ...

  9. JQuery初探

    [TOC] jquery 通过jQuery,您可以选取(查询,query)HTML元素,并对它们执行"操作"(actions). jQuery 使用的语法是 XPath 与 CSS ...

  10. 在SharePoint2010中用out-of-box的方式自定制Application Pages(AccessDenied,Confirmation,Error,Login,RequestAccess,Signout,WebDeleted)

    在实际项目中需要对SharePoint2010中的AccessDenied页面进行自定制,于是乎上网搜索相关内容,经实际操作此方法可行,便以此文记录. 在SharePoint2010中,由于secur ...