战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

从XP开始,多出了一套叫ApplicationData的目录,由于是NT内核及多用户的引用,因此在没有管理员权限的帐号打开安装过的程序时,应用程序是无法写入自己的目录的,因此早期的一些程序会因此遇到一些故障.

解决这个问题的方法是获取ApplicationData的目录位置,根据自己应用程序的名称创建配置文件.

这些网上都能搜到,主要是使用SHGetFolderPath的API,这里要说下 int csidl这个参数的几个区别:

CSIDL_COMMON_APPDATA   所有用户都可以使用的应用程序配置,映射All Users\Application Data

CSIDL_APPDATA                指定用户使用的应用程序配置,并且可以通过域同步漫游的,映射<user name>\Application Data

CSIDL_LOCAL_APPDATA      本机使用,不能漫游的应用程序配置,映射<user name>\Local Settings\Applicaiton Data

另外,由于这些路径使用起来并不方便,因此一般我们还是习惯在应用程序下存储配置文件,这就涉及一个检测是否应用程序文件夹有写权限的问题.

我尝试过:

int _waccess( 
   const wchar_t *path, 
   int mode 
);
  MSDN里说这个函数可以用于判定一个文件夹是否有写权限,但是实际测试中,这个函数对于有权限控制的文件夹毫无作用,始终返回可写.
  因此,最笨的方法,依然是直接在应用程序目录下创建一个临时文件,创建成功说明可写,然后再删除这个文件(好恶心的方法).不过话又说回来,这是C时代的函数,应该不会做太多平台相关的判断.
 
posted on 2011-03-09 16:38 战魂小筑 阅读(2500) 评论(0)  编辑 收藏 引用 所属分类: C++/ 编程语言

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理