设为首页 收藏本站
查看: 792|回复: 0

Windows 8 应用开发权威指南 之 应用程序的数据存储(1)应用程序安装目录操作

[复制链接]

尚未签到

发表于 2015-5-23 10:00:21 | 显示全部楼层 |阅读模式
  
应用程序安装目录
前面介绍了如何对本地应用存储空间中的文件以及文件夹进行操作,在应用中除了可以对本地应用存储空间进行操作之外,还可以对应用程序安装目录进行相关操作。本节将通过一个示例,详细讲解如何对应用程序安装目录中的文件进行操作,此示例可以实现获取应用程序安装目录下的图片文件并将其显示,还可以实现复制安装目录下的文件。
在Visual Studio 2012中新建一个Windows应用商店的空白应用程序项目,并命名为InstalledLocationApp。双击打开项目的MainPage.xaml文件,在Grid元素中添加如下代码,布局前台界面。


   

        
        
   
   

        
        
            
               
                    
               
            
        
   

上面的代码为应用添加了两个按钮、一个文本块和一个ListView控件,并在ListView控件中添加了一个Image控件,两个按钮分别为“开始复制”和“显示图片”,其中“开始复制”按钮用来对安装目录中的XML文件进行复制,“显示图片”按钮用于获取安装目录中的图片文件,并将获得的图片在ListView的Image控件中显示。这里通过数据绑定为ListView创建了数据模板,将图片的地址绑定到Image控件,关于数据绑定的介绍请查看相关章节。
布局了前台界面后,下面介绍后台功能的实现,为了方便对图片进行管理,我们首先在MainPage.xaml.cs文件中创建表示图片的Picture类,并在其中定义代表图片路径的Uri属性。代码如下所示:

public class Picture
{
    public String Uri { get; set; }
}
接下来将陆续实现“开始复制”和“显示图片”按钮的功能,分别为按钮添加实现其功能的单击事件处理方法,首先来看“显示图片”按钮,实现其功能的单击事件处理方法ViewPictureButton_Click如下所示。

async private void ViewPictureButton_Click(object sender, RoutedEventArgs e)
{
    List pictureList = new List();
//获得picture文件夹
    StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("picture");
    IReadOnlyCollection files = await folder.GetFilesAsync();
//获得图片
    foreach (StorageFile file in files)
    {
        pictureList.Add(new Picture { Uri = "picture/" + file.Name });
    }
    ShowPicture.ItemsSource = pictureList;
}
方法首先创建了一个List集合pictureList,然后使用GetFolderAsync获得安装目录中的picture文件夹,通过GetFilesAsync方法异步获取文件夹中的图片,并将获得的图片保存在只读集合files中,使用foreach循环遍历files,调用Add方法将其中保存的图片添加到集合pictureList里面,最后将pictureList绑定到ListView中。
现在已经实现了“显示图片”按钮的功能,不过在运行程序之前还需要做一些必要的准备工作,由于这里显示的是应用程序安装目录中picture文件夹下的图片文件,而创建项目时默认是没有picture文件夹的,因此需要在项目的解决方案资源管理器中新建一个picture文件夹,并在文件中放入一些图片文件。
完成上面的准备工作之后,按F5键运行程序,单击“显示图片”按钮,界面的显示效果如图13-2所示。
http://images.cnitblog.com/blog/41633/201304/23190303-8df31ebd2c354611aef5e8e1242c2e67.png

图13-2 显示图片

接下来继续来实现“开始复制”按钮的功能,实现按钮功能的单击事件处理方法如下所示。

async private void CopyFile_Click(object sender, RoutedEventArgs e)
{
    //获取应用程序安装目录下名为Model的文件夹
    StorageFolder copyFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Model");
    //获取Model文件夹下名为“word.xml”的文件
    StorageFile copyFile = await copyFolder.GetFileAsync("word.xml");
    //读取文件内容
    IBuffer buffer = await FileIO.ReadBufferAsync(copyFile);
    //在本地应用存储空间中新建一个名为“word.xml”的文件
    StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("word.xml", CreationCollisionOption.OpenIfExists);
    //将读取的内容写入到该文件中
    await FileIO.WriteBufferAsync(file, buffer);
    tbMessage.Text = "复制文件成功!";
}
代码使用异步方法GetFolderAsync获得安装目录下名为Model的文件夹,通过GetFileAsync方法获取其中的word.xml文件,并使用StorageFile类型的copyFile将其保存,以copyFile为参数调用FileIO类的ReadBufferAsync方法异步读取word.xml文件中的内容,接着通过CreateFileAsync方法在本地应用存储空间中新建一个名为word.xml的文件,最后使用FileIO类的WriteBufferAsync方法将读取到的内容写入到新建的word.xml文件中。
这样就实现了“开始复制”按钮的功能,与上面的情况一样,在运行程序之前需要在项目的解决方案资源管理器中新建一个Model文件夹,并在文件中放入一个word.xml文件。
完成准备工作之后,按F5键运行程序,单击“开始复制”按钮,界面的显示效果如图13-3所示。

http://images.cnitblog.com/blog/41633/201304/23190305-95f21af2f1e44649988f18a3392a1c19.png
   
图13-3 复制成功提示信息

  这时定位到本地应用存储空间,会发现word.xml文件已经复制到其中。
  
注:本文选自机械工业出版社3月出品的《Windows 8 应用开发权威指南》第12章 传感器
  另外:为在4月27日举办的微软云体验营免费活动做一下宣传。
  4月27日 微软云训练营活动,期待您的报名参加,本次活动无需任何费用。
http://images.cnitblog.com/blog/41633/201304/16111002-eae1158c78ea45e9879dc03dd5b9c78f.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69736-1-1.html 上篇帖子: 从Windows Phone 8 Developer Docs整理的关于XNA记录(Preview) 下篇帖子: Windows 8下任何Windows Store App无法运行(闪退)的解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表