在开发过程中我们经常需要用到很多资源文件,比如城市名字和拼音对应列表等等。
这类文件为什么要作为本地资源文件用呢?一般是因为:
1、我们不喜欢把这些资源硬编码到代码里,比如一个城市列表“北京-Beijing、上海-Shanghai、……”,如果硬编码到代码里显然不如弄到XML(或者JSON,甚至是TXT文件)里灵活。
2、尽管这种资源可以从网络上获取,但对于操作频繁的操作还是做到本地比较好(然后再加载到内存中显然更好),何况这种资源也不是很大。
WP7读取本地资源文件,步骤很简单。比如我们有一个city.xml需要读取:
首先,把此文件Copy到我们的项目中,然后设置它的属性{复制到输出目录:始终复制,生成操作:Resource}(当然,也可以设置成如果较新则复制,个人感觉使用效果上没什么区别)
然后,代码中调用:
- StreamResourceInfo reader = Application.GetResourceStream(new Uri("/{你的项目名字};component/{文件的路径}", UriKind.Relative));
- XElement xml = XElement.Load(reader.Stream);
读取txt文件
如果在项目中附加一个文件的时候,需要设置文件的Build Action属性,如果设置为content ,你会在“bin”文件夹中的xap包中 发现此文件;(xap:把xap文件后加上.zip会变成一个压缩包,解压后会发现里面的内容)如果设置为resource,文件会添加到项目文件的 dll文件中。
- //读取属性Build Action为content的txt文件
- //用stream获取文件的二进制流
- Stream st = Application.GetResourceStream(new Uri("files/firle1.txt", UriKind.Relative)).Stream;
- string str = new StreamReader(st).ReadToEnd();
- MessageBox.Show(str);
- //读取属性Build Action为Resource的txt文件
- Stream st1 = Application.GetResourceStream(new Uri("/demo(项目名称);component/files/firle2.txt", UriKind.Relative)).Stream;
- string str1 = new StreamReader(st1).ReadToEnd();
- MessageBox.Show(str);
图片文件可以通过URI访问
添加引用
- using System.Windows.Media.Imaging;
- Uri uri = new Uri("/image/text.jpg", UriKind.Relative);
- BitmapImage bmp = new BitmapImage(uri);
- image1.Source = bmp;
XML文件可以借助XElement.Load()方法访问
多媒体文件可以通过MediaPlayerElement控件访问;