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. 无废话ExtJs 入门教程七[登陆窗体Demo:Login]

    无废话ExtJs 入门教程七[登陆窗体Demo:Login] extjs技术交流,欢迎加群(201926085) 在这节我们通过前几节讲的内容做一个登陆页面,把前几节讲的内容贯穿一下. 1.代码如下: ...

  2. 游戏主循环(Game Loop)

    游戏主循环是游戏的心跳,一般使用while循环进行主动刷新. 一次循环由获取用户输入.更新游戏状态.处理AI.播放音乐和绘制画面组成. 这些行为可以分成两类: update_game(); // 更新 ...

  3. 《AngularJS》5个实例详解Directive(指令)机制

    本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请期待口令:Angular 1.一点小说明 指令的作用:实现语义化标签 我们常用的HTML ...

  4. DB2 日期相减

    简单方法: 使用 days 字符型的日期:2012-01-01,2012-01-11 values  days(date('2012-01-11')) - days(date('2012-01-01' ...

  5. mac下php开发环境搭建+CI框架使用

    一.启动apache: apachectl start 停止: apachectl stop 配置文件: vi /etc/apache2/httpd.conf 一.修改端口 因为80端口不想被占用,8 ...

  6. php的时间输出格式

    php中时间一般分为两种格式,一种是标准时间格式timestamp,即Y-m-d G:i:s.另一种就是时间戳. 例如: 一.标准时间与时间戳转换: //获得服务端系统时间 date_default_ ...

  7. PHP json_encode中文乱码解决方法

    相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题.JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题.JSON和js一样,对于 ...

  8. LIS的nlogn

    nlogn老忘,开个帖记录一下 开一个栈,每次取栈顶元素top和读到的元素temp做比较,如果temp > top 则将temp入栈:如果temp < top则二分查找栈中的比temp大的 ...

  9. JDK 1.5 1.6 override区别

    今天在更新时发现有个别项目报错,报错信息 到网上搜索了之后,根据网上描述,修改了一批配置都不行: http://bestchenwu.iteye.com/blog/997420(这个里面的方法二,即为 ...

  10. 处理FF margin-top下降问题

    处理DIV子级ZImargin-top下降,父级更着下降问题 html结构如下 <div id="top"> <div id="zi"> ...