一起谈.NET技术,关于Windows Phone数据库和Silverlight本地文件操作

  Isolated Storage是针对各个独立用户分配的单独的虚拟存储空间,在Windows会存储在\%AppData%\LocalLow\Microsoft\Silverlight\is, 而在Mac OS X会存储在 /Users/<user>/Library/Application Support/Microsoft/Silverlight/is。

  Isolated Storage有点像cookies,每个用户独立存储,Isolated Storage的容量是有配额的,但是可以通过调用System.IO.IsolatedStorage.IsolatedStorageFile.IncreaseQuotaTo()来增加容量。

下图为Isolated Storage的地址。

  无论浏览器版本的Silverlight还是Out Of Browser都可以自由使用Isolated Storage

IsolatedStorageFile theStore = IsolatedStorageFile.GetUserStoreForApplication();FileStream fs = new System.IO.IsolatedStorage.IsolatedStorageFileStream(@"wp.db", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, theStore);

可以在Isolated Storage里面自由的增加,修改删除文件和目录。

theStore.CreateDirectory("db");

  但是不能把Isolated Storage外面的文件拷贝到Isolated Storage里面。这个为开发带来很多困难,例如我想把sqlite的数据库文件存放到XAP里面一同发布,然后把这个数据文件存放到到Isolated Storage里面,以后可以对这数据库继续修改,数据还是保存在Isolated Storage里面。可是不能把XAP里面的文件拷贝到Isolated Storage里面,没办法使用预先定义的数据。

从我的文档拷贝数据到Isolated Storage的时候出错。

在Out of Browser中使用我的文档

如果使用了Out of Browser,程序可以中使用我的文档(My Documents)的文件。

  在项目属性中选择 "Enable running application out of browser",然后点击 "Out-of-Browser Settings",然后选择"Required elevated trust when running outside the browser"

if (App.Current.HasElevatedPermissions){FileStream stream = new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\wp.db", FileMode.OpenOrCreate);string streamobject = new StreamReader(stream).ReadToEnd();}

配置完毕以后就可以使用我的文档的文件了。使用我的文档的文件,App.Current.HasElevatedPermissions必须为true.

使用内嵌资源文件

  所谓内嵌资源文件就是把程序需要用到的offline文件打包到XAP包里面。可以参考 Silverlight如何内嵌资源,适用于Windows Phone

XDocument xDoc = XDocument.Load(@"db/wp.xml");

程序可以读取xml文件。

Image image = new Image();image.Source = new BitmapImage(new Uri("Images/" + station.Image, UriKind.Relative));

  也可以使用图片文件。

但是不能打开文件进行操作。

SaveFileDialog

SaveFileDialog 为用户提供了把文件保存到其他目录的可能性,但是其具有限制性,必须由用户操作,不能直接通过程序把文件保存到其他位置上。

SaveFileDialog textDialog;public MainPage(){    InitializeComponent();    textDialog = new SaveFileDialog();    textDialog.Filter = "Text Files | *.txt";    textDialog.DefaultExt = "txt";}

private void button1_Click(object sender, RoutedEventArgs e){bool? result = textDialog.ShowDialog();if (result == true)    {        System.IO.Stream fileStream = textDialog.OpenFile();        System.IO.StreamWriter sw = new System.IO.StreamWriter(fileStream);        sw.WriteLine("Writing some text in the file.");        sw.Flush();        sw.Close();    }}

关于Windows Phone数据库的思考

  Windows Phone不支持直接操作物理文件。沿用了传统Silverlight的做法,使用了Isolated Storage的虚拟目录空间。我想Isolated Storage对于Silverlight来说是不错的做法,程序不能直接操作物理文件,这样有效防止病毒的传播。但是Windows Phone从文件系统的角度看就是一台PC,如果PC本地程序(例如Winform和WPF)都不能操作物理文件,那也太杯具了。如果这个问题一直不能解决,Windows Phone第三方数据库永远都会有突破,因为没办法把预先定义的数据读取出来。

  目前解决方法有二:

  1. 等待微软出SQL CE for Windows Phone。我们不可以做,不代表微软不可以做,微软可以写原生代码(native C++)的。理论上什么都能做出来。

  2. 使用云和网络存储,没想到微软现在走的那么前,比google还绝,什么都用云。

之前认为微软是重点关注桌面系统,因为大部分收入来源于Windows和Office,而google重点关注Web,由于没有自身的操作系统,什么都想使用Web一统天下。但是从微软发布IE9对HTML5的支持可以看到,微软也对Web和云投入很大。但是基于Windows Phone来说,还是提供本地支持比较好,因为移动设备网络连通性没有其他电脑设备好,离线应用还具有很大市场。

时间: 2024-07-28 19:27:36

一起谈.NET技术,关于Windows Phone数据库和Silverlight本地文件操作的相关文章

关于Windows Phone数据库和Silverlight本地文件操作

Isolated Storage是针对各个独立用户分配的单独的虚拟存储空间,在Windows会存储在\%AppData%\LocalLow\Microsoft\Silverlight\is, 而在Mac OS X会存储在 /Users/<user>/Library/Application Support/Microsoft/Silverlight/is. Isolated Storage有点像cookies,每个用户独立存储,Isolated Storage的容量是有配额的,但是可以通过调用S

数据库访问与本地文件访问实测报告

访问|数据|数据库 一直认为数据库访问比本地文件访问是要慢很多的,但究竟慢多少却不清楚.终于忍不住作了下比较测试. 测试环境:OS---Windows 2000 Server DatabaseServer----SQLServer 2000 程序语言:CSharp 测试方式:从数据库中读取参数表/从XML中读取配置参数等同数量的记录并实例化对象. 测试程序如下: using System; using System.Globalization; using System.IO; using Sy

链接数据库时,对文件操作造成脚本异常:未将对象引用设置到对象的实例,感觉是代码出了问题

问题描述 链接数据库时,对文件操作造成脚本异常:未将对象引用设置到对象的实例,感觉是代码出了问题 第一次对文件进行操作,只是简单的添加照片而已,不知道问题出在那里,当我把操作文件那块代码注释后,其他功能都是正常的,代码如下: string fileExtesion = Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower(); if (FileUpload1.HasFile) { string path = Server.MapPa

Java 编程技术中汉字问题的分析及解决,文件操作

编程|汉字|解决|问题 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的 乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java 语言 默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编 码呢?本文将从汉字编码的常识入手,结合 Java 编程实例,分析以上两个问题并提出 解决它们的方案. 现在 Java 编程语言已经广

一起谈.NET技术,Windows 内核(WRK)简介

引子 WRK 是微软于 2006 年针对教育和学术界开放的 Windows 内核的部分源码,WRK(Windows Research Kernel)也就是 Windows 研究内核,在 WRK 中不仅仅只提供了 Windows 内核模块的部分代码,其还提供了编译工具, 也就是通过这个编译工具,你可以将你的 WRK 编译成一个 EXE 文件,也就是内核可执行模块,然后你可以利用这个 EXE 文件来取代操作系统本身的内核,这样的话,下次开机的时候操作系统所加载的内核就是您编译的那个 EXE 了. 工

一起谈.NET技术,不附加数据库 ASP.NET调用.sql文件

笔者好久没有写随笔了,这次是遇到提出这样的问题"不用附加数据库,什么修改web.config什么的那么麻烦,而是直接运行一个页面,然后根据向导一步一步引导用户安装生成数据库"那么这样做就需要一个创建数据库的语句和创建这些数据库表的语句,还有这些创建数据库视图以及函数的语句.创建数据库语句好办, "IF Not EXISTS (select name from master.dbo.sysdatabases where name = N'" + DataBaseNam

一起谈.NET技术,Windows Mobile 6.5的开始菜单

缘由 由于 luafie 对 Windows Mobile打包时增加快捷方式到开始菜单的方法 有些疑问,我把自己的经验总结一下.   历史发展 Windows Mobile的开始菜单一直被我认为是错误的设计.我之前就讨论过我对菜单的看法,可以参考 Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?    开始菜单是Windows的制胜法宝,如下图. 却却是Windows Mobile的历史包袱,下图为Windows

一起谈.NET技术,.NET的资源并不限于.resx文件,你可以采用任意存储形式 [下篇]

在<上篇>中我们谈到ResourceManager在默认的情况下只能提供对内嵌于程序集的.resources资源文件的存取.为了实现对独立二进制.resources资源文件的支持,我们自定义了BinaryResoruceNManager.在本篇中我们还将创建两个自定义的ResourceManager,以实现对独立.resx资源文件和自定义结构的XML资源文件的支持.(文中的例子从这里下载) 一.自定义ResXResourceManager实现对.Resx资源文件的支持 二.将资源定义在自定义结

一起谈.NET技术,WPF Multi-Touch 开发:基础触屏操作(Raw Touch)

多点触控(Multi-Touch)就是通过与触屏设备的接触达到人与应用程序交互的操作过程.例如,生活中经常使用的触屏手机.触屏笔记本.显示器以及微软最新的Surface 产品等这些都属于触屏操作设备.本篇将介绍如何开发能够支持MT 功能的应用程序. 在WPF 4 中已经具备的多点触控开发技术,当多个手指触碰到触屏设备时,WPF 会把每跟手指认为是一个触控设备,并为其分配唯一的识别ID,以便跟踪不同手指的操作手势.下面将通过实例演示WPF 所支持的低级别触控操作:触碰(TouchDown).分离(