关于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", File

Mode.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.Special

Folder.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 Main
Page()

{

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:33

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

一起谈.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的容量是有配额的,但是可以通过调用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

Node.js本地文件操作之文件拷贝与目录遍历的方法_node.js

文件拷贝NodeJS 提供了基本的文件操作 API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件拷贝程序练手.与 copy 命令类似,我们的程序需要能接受源文件路径与目标文件路径两个参数. 小文件拷贝我们使用 NodeJS 内置的 fs 模块简单实现这个程序如下. var fs = require('fs'); function copy(src, dst) { fs.writeFileSync(dst, fs.readFileSync(src)); } function main(a

windows 7如何不产生本地文件浏览记录

第一步:打开注册表,在开始搜索框中输入"regedit" 第二步:在打开的注册表中搜索"TypedPaths",按"Ctrl+F"搜索,当然也可以一个一个去找"HKEY_CURRENT_USER"-"Software"-"Microsoft"-" Windows"-" CurrentVersion"-" Explorer"-&q

Node.js程序中的本地文件操作用法小结_node.js

Node最引以为傲的就是它有一个非常小的核心.有一些语言绑定了完整的POSIX API,而 Node实现了尽可能少的绑定,并通过同步.异步或流API形式暴露他们. 这种方法意味着,操作系统中有一些非常方便的功能,需要在Node中重建.这是一个教你如何使用文件系统软件包的实用教程. 引用文件与文件系统的交互很重要的一点是要指向正确的文件.由于NPM的包使用相对路径引用,所以你不能把路径写死在代码.有两个主要方式来以确保包能引用到正确的文件: // 使用 `path.join()` 而不是 `+`

如何应用T-SQL实现本地文件操作

最近用VC为公司写一个远程数据库监控程序,程序需要在内网长时间运行. 其实很简单,用户在WEB页面提交数据到数据库,软件间隔一段时间询问一次数据库,如果有新的记录就做相应的处理. 但是WEB页面提交的记录很复杂:记录主要保存文本文件路径,但是文本文件可能包含真实数据,也可能包含另外一条数据库记录的ID,还可能包含另外一个文件路径. 总之,最后的结果上得到用户提交的文件的路径,然后下载文件,处理文件. 如果把全部的分析操作都放到应用程序来实现,可能需要多次查询远程数据库取记录,降低速度,增加了程序

Windows8下如何设置不保存本地文件浏览记录

  Windows 8下浏览本地文件是同样会产生文件浏览记录,相对于Windows 7系统,Windows 8系统就比较简单的多.        小编推荐:windows 7如何不产生本地文件浏览记录 操作步骤: 如果不想让浏览记录产生,需要到注册表中去禁用权限;在运行中输入regedit打开注册表 在注册表中Ctrl+F 一下,在搜素框中输入"TypedPaths"搜索一下,可能需要搜索两次,当然也可以一个一个去找"HKEY_CURRENT_USER"-"

Windows 8 Store Apps学习(22) 文件系统: 访问文件夹和文件,搜索本地文件

文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件 介绍 重新想象 Windows 8 Store Apps 之 文件系统 File Access - 访问文件夹和文件,以及获取文件的各种属性 Folder Access - 遍历文件夹时的一些特殊操作 Thumbnail Access - 获取文件的缩略图 AQS - 通过 AQS(Advanced Query Syntax)搜索本地文件 示例 1.演示如何访问文件夹和文件,以及如何获取文件的各种属性 FileSystem/FileAc