Effective C# 原则37:使用标准的配置机制
2009-02-19 08:15:49 来源:WEB开发网Environment.SpecialFolders.ApplicationData返回当前用户的路径,而且在网络上被所有机器共享的。在默认安装中,GetFolderPath(SpecialFolders.ApplicationData)返回 C:Documents and Settings<用户名>Application Data。每个用户有他(或她)自己的应用程序数据目录。当用户登录到一个域是,使用这个列举进入到共享网络上,而且在网络上包含了用户的全局设置。存储在这里的数据只由当前用户使用,不管是从网络上的哪台机器登录过来的。
Environment.SpecialFolders.LocalApplicationData返回一个特殊的目录,该目录队了存储设置信息以外,同时也是一个用户的私人目录,它只属于从这台机器上登录的用户。一般GetFolderPath(SpecialFolders.LocalApplicationData)返回:C:Documents and Settings<用户名>Local SettingsApplication Data
这三个不同的位置可以让你存储每个人的设置信息,给定用户的信息,或者是给定用户并给定机器的信息。具体的使用哪一个取决于应用程序。但考虑一些明显的例子:数据库链接字符串是一个全局设置,它应该存在在通用应用程序数据(Common Application Data) 目录中。一个用户的工作内容应该存在在应用程序数据(Application Data)目录中,因为它只取决于用户。窗口的位置信息应该在本地应用程序数据(Local Application Data)目录中。因为它们取决于机器上的用户的属性(不的机器可能有不同的分辨率)。
应该有一个特殊的目录,它为所有应用程序的所有用户设置存储,描述顶层的目录结构。这里,你须要在顶层目录结构下创建子目录。.Net框架的System.Windows.Application类定义了一些属性,这些属性可以为你创建一些通用的配置路径。Application.LocalAppDataPath属性返回GetFolderPath(SpecialFolders.CommonApplicationData)+"CompanyNameProductNameProductVersion"的路径。类似的,Application.UserDataPath和Application.LocalUserDataPath产生位于用户数据和本地数据目录下的路径名,这一目录包括公司,应用程序,以及版本号。如果你组合这些位置,你就可以为你自己公司的所有应用程序创建一个配置信息,或者为某一程序的所有版本,或者是特殊版本。
注意到了,这些目录中我没有提到过应用程序目录,就是在Program Files下的目录。你决不应该在Program Files或者在Windows 系统目录以及子目录里写数据。这些目录要更高的特权,因此你并不能指望你的用户有权利来写这些数据。
当在哪里存储应用程序的设置数据成为一个很重要的问题,就像每个企业级用户到家庭用户所担心的机器安全问题一样时,把信息放在正确的位置就意味着对于使用你的应用程序的用户来说没有折衷的办法。你还是要给用户提供私人的感觉,用.Net的顺序组合正确的位置,这样可以很容易的给每个用户一种私有的感觉,而且不用折衷安全问题。
更多精彩
赞助商链接