讨论一下数据文件的存储位置
2016-08-08 15:26
387 查看
在写程序时,经常会遇到读写数据文件的情况,比如载入(保存)配置文件等。
一般用户在安装程序时,会选择默认的目录”Program Files”或者”Program
Files(x86)”。以前都是直接把数据文件放到程序根目录中,所以数据文件就存储在”Program Files\xxx”文件夹下。
最近才知道这样做其实有可能会产生“Access Denied”异常。
想要把数据写入一个合理的位置,Windows提供了三种
这三个文件夹可以通过Environment.SpecialFolder的枚举获得
这样配置文件就不会存储在程序所在目录,而是像”C:\Users\Administrator\AppData\Local\“这样的目录中。但是现在还有一个小问题,当我们对程序有了一些修改后,新的程序和旧程序的配置文件使用的是同一个文件夹,这样新的配置文件就会把旧的配置文件覆盖掉。
我想到的一个解决方法是使用GUID,原因是:
- 程序的GUID在编译过程中是不变的,无论你的程序是一个exe文件还是一个dll类库。
- 不通程序的GUID是不同的,哪怕程序的名称完全相同。
下面是生成配置保存文件夹的代码
一般用户在安装程序时,会选择默认的目录”Program Files”或者”Program
Files(x86)”。以前都是直接把数据文件放到程序根目录中,所以数据文件就存储在”Program Files\xxx”文件夹下。
最近才知道这样做其实有可能会产生“Access Denied”异常。
想要把数据写入一个合理的位置,Windows提供了三种
User Data Roaming User Data All User Dat
这三个文件夹可以通过Environment.SpecialFolder的枚举获得
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
这样配置文件就不会存储在程序所在目录,而是像”C:\Users\Administrator\AppData\Local\“这样的目录中。但是现在还有一个小问题,当我们对程序有了一些修改后,新的程序和旧程序的配置文件使用的是同一个文件夹,这样新的配置文件就会把旧的配置文件覆盖掉。
我想到的一个解决方法是使用GUID,原因是:
- 程序的GUID在编译过程中是不变的,无论你的程序是一个exe文件还是一个dll类库。
- 不通程序的GUID是不同的,哪怕程序的名称完全相同。
下面是生成配置保存文件夹的代码
//获取GUID public static Guid AppGuid { get { Assembly asm = Assembly.GetEntryAssembly(); object[] attr = (asm.GetCustomAttributes(typeof(GuidAttribute), true)); return new Guid((attr[0] as GuidAttribute).Value); } }
//得到配置文件保存的文件夹 public static string UserDataFolder { get { Guid appGuid = AppGuid; string folderBase = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); string dir = string.Format(@"{0}\{1}\", folderBase, appGuid.ToString("B").ToUpper()); return CheckDir(dir); } }
//检查文件夹是否存在,如不存在则创建 private static string CheckDir(string dir) { if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } return dir; }
相关文章推荐
- Outlook 2003中各个数据存储和配置文件的存放位置
- SharedPreferences数据、openFileOutput文件、SQLite数据库文件存储位置
- 怎么修改Outlook2010 PST数据文件位置(默认邮件存储目录)
- MySQL-5.7设置InnoDB表数据文件存储位置
- 怎么修改Outlook2010 PST数据文件位置(默认邮件存储目录)
- MySQL数据文件存储位置的查看方法
- mysql数据库存储路径更改 数据文件位置
- 呵呵,讨论一下,理解又深刻了(虚拟地址 存储位置)
- 如何修改mysql数据文件存储位置
- Postgres 数据表文件存储位置
- 详述查看 MySQL 数据文件存储位置的方法
- mysql数据库存储路径更改 数据文件位置
- RAC使用共享存储,使用数据泵导入时,数据文件存放位置查询
- MySql数据文件以及存储位置介绍
- SharedPreferences数据、openFileOutput文件、SQLite数据库文件存储位置
- MySQL-5.7中InnoDB表数据文件存储位置
- 如何修改mysql数据文件存储位置
- 详述查看 MySQL 数据文件存储位置的方法
- C#中利用ADO.NET存储图片、文件等二进制数据
- 存储过程将.txt.xls文件数据导入数据库表格