什么是独立存储
独立存储(isolatedstorage)这个东西 是首先在SilverLight使用的(好 吧我是因为wp才认识独立存储的)
要说明什么是独立存储 首先就说什么是独立(isolated) 独立就是自个为一体
独立存储就是 A程序存的东西只能A用 B不能用 相同道理B的东西只能B自 己用A不能访问
这样做的很大好处是能提升安全性 哪怕你自个下载个病毒那病毒也只能在自个 的独立存储空间内才能形成破坏
由于wp的独立存储其实是“共享存储”(大家的独立存储空间 其实都是共享手机的那块内存 所谓独立只是逻辑上的文件形式独立而不是空间的独立)
所以wp 手机就算中毒最坏的情况也只是手机空间被撑暴而已(自个理解 欢迎拍砖)
独立存储分2种形 式:
1.文件形式的存储,通过真实的文件和目录的形式来创建和管理数据
2.设置的形式 ,通过字典的方式创建键值对,可用于保存少量的数据(对于实现墓碑机制和诸如软件的设置一类的话 这货挺有用的)
首先说明下独立存储(IsolatedStorage)是位于 System.IO.IsolatedStorage
当输入IsoLatedStorage的时候智能提示会有4个跟独立存储有关的 。。。这个应该叫选项还是选择呢?
其中第一个IsolatedStorageException是独立存储的异常错误
第二个就是用来创建和 管理文件的
第三个则主要是用于读取,将独立存储里存储的文件已流的形式读取出来(此类继 承自FileStream,大部分情况下适用与FileStream的都可以兼容这货)
第四个则是以设置的形 式获得独立存储区。。(就像刚才说的独立存储的2种形式的第二种)
异常没什么好说的 重点 说第二跟第四个 也就是IsolatedStorageFile 和 IsolatedStorageSettings
IsolatedStorageFile
先说如何在独立存储里创建一个名叫 hello.txt且里面写着hello的文本文档。。
要在独立存储区里新建一个文件 首先要先获得该软 件(一说用户)所拥有的独立存储区
var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
(。。。第一次写带代码的博客 不会 高亮显示关键字。。。如何弄呢? HTML代码看着蛋疼啊。。。)
然后创建该文件
var fileName = appStorage.OpenFile(“hello.txt”,FileMode.OpenOrCreate)
对于这句代码可能 会有疑问,不是说好的创建吗? 怎么是OpenFIle的?而且appStorage里也有个CreateFile的方法啊
说到这个请注意代码的后半段,FileMode.OpenOrCreate 虽说我是用了 OpenFile这个没错,不过有FileMode在。。。
OpenOrCreate意味着如果文件当前存在,则读取 文件,假如不存在,就新建一个,不过这是在你可能拥有文件的前提下才用OpenFile会比较科学,如果 死都要创建新文件的话
如果直接用CreateFIle的话,假如当前独立存储区已经有了该文件会报 Exception的
科学的做法是要先确定文件是否存在,如果存在则删除在创建(懒了。。直接贴我 自己写的代码的图吧)
好了 现在已经有了那个文件了 如何向里面写入数据呢 这个的话个正常 的其他c#的io操作差不多,直接用StreamWriter就ok了
StreamWriter sw = new StreamWriter (fileName);
sw.WriteLine("hello");
自此就已经完成任务啦,在独立存储 区里创建了一个叫 hello.txt的文件且里面写有hello
另外稍微注意的是独立存储是属于非托管 资源 所以其需要手动释放(想问为什么??跟Stream为什么需要手动释放同道理,非托管的不被CLR管 理)
典型的办法最好是新建独立存储的时候用一个using语句围起来 这样可以避免忘记 Dispose
另外可能有人问 我存进去了那怎么读出来呢?基本步骤差不多(我都用了OpenFile了 ,其实就是为了方便,读写一体化)
然后StreamWriter换成StreamReader读出里面的流即可
IsolaterStorageSettings
这个东西会在独立存储区内以字典的形式保存数据
感 觉好像是存在一个叫 __ApplicationSettings 的文件里(不知道正确与否 但是用上了Settings的话好 像就铁定会多出这个文件)
也通过例子来说话
这次的目标是在独立存储区保存一个键为 "hello”值为"everyone”
首先也要跟File那个差不多获取当前软件内所拥有的独立 存储区 不过这次获得的是Settings而不是File了(毕竟我们是要保存到Settings而不是以真实文件形 式保存)
IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings;
获取之后其实就可以很简单的
setting[“键的名称"]=值
新闻热点
疑难解答