前段日子读代码时发现了一个不曾用过的命名空间——System.IO.IsolatedStorage,通过该命名空间下面的一些类(如IsolatedStorage、IsolatedStorageFile、IsolatedStorageFileStream等)可以把应用程序中一些敏感的信息保存在文件系统之外,这让我感到很兴奋。
举个简单的例子,下面这行代码可以在IsolatedStorage(MSDN中译为“独立存储区”)寻找是否有一个名为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:技术
留言反馈
也许用熟了之后会好...
C:\Documents and Settings\CER\ASPNET\Local Settings\Application Data\IsolatedStorage\vxtcx3s5.rgi\qdqrdsxc.nva\Url.f44my4kvl2hzhmacq1gws4w0cswi1zr0\Url.vvf2zgxghvek1ht2jgt33inhnmjw023c\Files\UserNameDir
一个人登陆就往内写入内容,别一个人登陆也写内容
/// <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;
}
}
结果是:两个人用时就会"交叉感染"
Documents and Settings\Administrator\Local Settings\Application Data\IsolatedStorage
默认是10M的空间限制
最大用处还是让受限代码有自己的存储区域