如何才能保证自己的资源文件(图片,xml配置文件等)不被用户删除呢?

  

 

 

 

 

        今天,查看了一下Sony Ericsson X1手机内的图片文件,发现其格式基本都是"ReadOnly & System"属性,也有一部分是"Archive"属性。然后修改一张图片的属性并删除。结果,再点击Panel键,屏幕竟然不显示Panel界面了。我想,响当当的索爱应该在保护机制上做的不错吧,至少有二进制备份,于是就重启机器,结果还是看不到Panel界面。

如何才能保证自己的资源文件(图片,xml配置文件等)不被用户删除呢?

自己做了以下尝试: 

  文件为ReadOnly属性,那么通过File.Delete()函数并不能删除文件,会提示错误!这也是大多数同步软件和查看工具不能删除属性为ReadOnly的文件的原因。

  文件为ReadOnly属性,去掉文件的ReadOnly属性,然后File.Delete()掉,这个方法可行。

FileInfo fi = new FileInfo(filePath);
fi.Attributes 
= FileAttributes.Normal;
File.Delete(fi.FullName);

    

  文件为ReadOnly属性,通过手机设备自己的File Explorer的右键Delete来删除,可以删除! 

    为什么呢?于是猜想是不是 File Explorer 在删除文件前做了和上一条同样的事情,然后再删除!

  尝试删除操作系统级文件“pim.vol” ,查询其属性为“System & Archive”,但是,无论是自己操作File.Delete()还是File Explorer的右键Delete来删除,都无法删除。 

 

 至此,我们得出结论:除了操作系统级文件外,其余的文件无论其是否为ReadOnly属性,只要修改其属性为Normal,都可以File.Delete()掉。那么用户由于误删文件造成的程序不能正常显示或运行的可能性也就大大增加了。

 

到底该怎么解决呢?

 
  将文件的属性设置为Hidden&ReadOnly&System,那么在手机设备上也就不能显示了,用户自然也就不能删除! 但是一些同步工具查看文件的方法是遍历整个文件夹,那么Hidden的文件也就会显示出来了。如果他们的删除操作也和File Explorer的右键Delete做相同的操作,那也就不能避免了!

  将一些图片资源等写成2进制资源,然后备份到Windows目录下。每次启动程序时,先检查程序目录的资源是否存在,如果不存在则将2进制资源重新写到程序目录下。但如果用户也不小心删除该2进制资源文件呢?

  将资源全部嵌入到程序里? 我想大多数开发人员是不会这么做的吧? 臃肿而无法修补、升级! 

 

因此,我们无法阻止用户删除文件,唯有将自己的程序写的更健壮,即使缺少资源文件时,也可以保证程序正常运行,缺少的无非是一些可以修补的资源,但程序的精神还是在的!

 

上面只是我个人的一些愚见,希望朋友们批评指正!如果有什么好办法,我们可以一起探讨,跪膝求知! 

 

posted on 2009-11-24 14:43 李森 - listen 阅读(...) 评论(...) 编辑 收藏

公告

导航