我的.NET生活

活着便精彩!
随笔 - 41, 评论 - 680, 引用 - 66

导航

工具

关于

标签

每月存档

广告



访客

 

前段日子读代码时发现了一个不曾用过的命名空间——System.IO.IsolatedStorage,通过该命名空间下面的一些类(如IsolatedStorageIsolatedStorageFileIsolatedStorageFileStream等)可以把应用程序中一些敏感的信息保存在文件系统之外,这让我感到很兴奋。

 

举个简单的例子,下面这行代码可以在IsolatedStorageMSDN中译为“独立存储区”)寻找是否有一个名为PersonalFeedList.xml的文件:

 

if (IsolatedStorageFile.GetUserStoreForDomain().GetFileNames("PersonalFeedList.xml").Length!=0)

    {

        IsolatedStorageFileStream listLoader=new IsolatedStorageFileStream("PersonalFeedList.xml",

                                               FileMode.Open, IsolatedStorageFile.GetUserStoreForDomain());

        // TODO: process the FileStream here

        }

 

关于IsolatedStorage命名空间的具体应用大家如有兴趣可以查阅MSDN,我个人认为IsolatedStorage非常适合存储那些应用程序运行过程中产生的临时文件,比如下载到本机需要进一步处理的xml文件。这些文件不便于呈现给最终用户,有些还不能让用户看到(比如一些临时性的密码存储)。由于IsolatedStorage独立于用户的文件系统,因此这种存储方式在某种程度上保证了数据的保密性。

 

不过此项应用也有诸多不足,最主要的一点是:你不应该用它来存储永久性文件,因为用户可以使用.NET SDK中的storeadm.exe工具删除独立存储区的所有数据,方法是:

 

storeadm /remove

 


随贴广告(测试期)
相关文章

打印 | 张贴于 2004-03-10 21:13:00 | Tag:技术

留言反馈

回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
感觉用起来还是稍微有点麻烦,.net类似的东西应该还有很多,知道就好,但是,都可以找到更好的方法来替代!

也许用熟了之后会好...
2007-10-16 21:15:00 | [匿名用户:briangzhu]
Represents an isolated storage area containing files and directories by System.IO.IsolatedStorage 编辑
StorageHelperClass CodehighlightingproducedbyActiproCodeHighlighter(freeware)http://www.Code...
2007-01-11 10:41:00 | [匿名用户:mornlee]
re: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
不光有配额限制,好像元素数量(Size: Number of elements in the cache )也有限制,超过79个就会自动删除前面创建的,不知道什么原因??? 有高手知道不???
2006-10-26 11:39:00 | [匿名用户:BillKang]
re:临时数据存储可以考虑的方法——IsolatedStorage 编辑
临时数据存储可以考虑的方法——IsolatedStorageooeess
2005-06-14 18:39:00 | [匿名用户:测汞]
re:临时数据存储可以考虑的方法——IsolatedStorage 编辑
临时数据存储可以考虑的方法——IsolatedStorageooeess
2005-06-14 06:05:00 | [匿名用户:气味检测仪]
re:临时数据存储可以考虑的方法——IsolatedStorage 编辑
^_~,pretty good!csharpsseeoo
2005-05-17 10:55:00 | [匿名用户:接合强度测试仪]
re:临时数据存储可以考虑的方法——IsolatedStorage 编辑
^_^,Pretty Good!
2005-04-16 03:02:00 | [匿名用户:日本三丰]
re:临时数据存储可以考虑的方法——IsolatedStorage 编辑
^_^,Pretty Good!
2005-04-10 20:01:00 | [匿名用户:实验室家具 ]
回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
我在服务器的这个目录下找到了文件:UserName.txt

C:\Documents and Settings\CER\ASPNET\Local Settings\Application Data\IsolatedStorage\vxtcx3s5.rgi\qdqrdsxc.nva\Url.f44my4kvl2hzhmacq1gws4w0cswi1zr0\Url.vvf2zgxghvek1ht2jgt33inhnmjw023c\Files\UserNameDir

一个人登陆就往内写入内容,别一个人登陆也写内容
2004-04-04 20:08:00 | [匿名用户:张科峰]
回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
这个行不通,我写的方法如下:
/// <summary>
/// 将username保存在"独立存贮空间"
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public void SaveUserName(string fromusername)
{
#region 将username保存在"独立存贮空间"
string username=fromusername;
//按用户、域、程序集获取独立存储区
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User|IsolatedStorageScope.Domain|IsolatedStorageScope.Assembly, null, null);
string[] myusername=isoStore.GetDirectoryNames("UserNameDir");
IsolatedStorageFileStream isoStream1=null;
if(myusername.Length==0)//没有目录
{
//创建目录
isoStore.CreateDirectory("UserNameDir");
//创建文件
isoStream1 = new IsolatedStorageFileStream("UserNameDir//UserName.txt", FileMode.Create, isoStore);
//写入文件
StreamWriter writer = null;
writer = new StreamWriter(isoStream1);
writer.WriteLine(fromusername);
writer.Close();
isoStream1.Close();
}
else
{
myusername=isoStore.GetFileNames("UserNameDir//UserName.txt");
if(myusername.Length==0)//没有文件
{
//创建文件
isoStream1 = new IsolatedStorageFileStream("UserNameDir//UserName.txt", FileMode.Create, isoStore);
//写入文件
StreamWriter writer = null;
writer = new StreamWriter(isoStream1);
writer.WriteLine(fromusername);
writer.Close();
isoStream1.Close();
}
else
{
isoStream1 = new IsolatedStorageFileStream("UserNameDir//UserName.txt", FileMode.OpenOrCreate, isoStore);
//写入文件
StreamWriter writer = null;
writer = new StreamWriter(isoStream1);
writer.Write(fromusername);
writer.Close();
isoStream1.Close();
}
}
#endregion
}

读的代码如下:
/// <summary>
/// 从"独立存贮空间"取username
/// </summary>
/// <returns></returns>
public string GetUserName()
{
string fromusername;

//按用户、域、程序集获取独立存储区
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User|IsolatedStorageScope.Domain|IsolatedStorageScope.Assembly, null, null);
string[] myusername=isoStore.GetFileNames("UserNameDir//UserName.txt");
if(myusername.Length==0)//没有文件
{
return null;//域中没有他的用户名
}
else
{
IsolatedStorageFileStream isoStream1=null;
isoStream1 = new IsolatedStorageFileStream("UserNameDir//UserName.txt", FileMode.OpenOrCreate, isoStore);
StreamReader reader =null;
reader=new StreamReader(isoStream1);
fromusername=reader.ReadLine();
reader.Close();
return fromusername;
}
}

结果是:两个人用时就会"交叉感染"
2004-04-04 19:18:00 | [匿名用户:张科峰]
回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
存储的实际位置为
Documents and Settings\Administrator\Local Settings\Application Data\IsolatedStorage

默认是10M的空间限制

最大用处还是让受限代码有自己的存储区域

2004-03-11 08:54:00 | [匿名用户:Rustle]
回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
好主意!哈哈 :B
2004-03-10 23:53:00 | [匿名用户:musicland]
回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
一般的用户很少安装SDK的,所以可以大胆的使用:)
2004-03-10 22:33:00 | [匿名用户:开心就好]
回复: 临时数据存储可以考虑的方法——IsolatedStorage 编辑
而且在smartclient中,因为客户端不能使用本地文件系统,就可以使用这个存储一些临时信息
2004-03-10 21:24:00 | [匿名用户:carfield]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode MVC Blogger System