引入SHGetFolderPath解决open函数执行失败问题

      开发Windows项目有二种方式:非服务和服务两种。两者,服务类型的程序的执行权限比较高。最近开发非服务类型的项目,调用c++的open函数创建日志文件,原以为是十拿九稳的事,结果出于意料,是NULL值。在排除路径参数、所在磁盘空间内存不足、文件被占用等情况下。最后将问题定位执行权限上。如果能够找到路径绕开权限问题,该是多么幸福的事啊!得高人指点,如愿以偿,下面我带大家看看。

1、文档

Here's a custom wrapper function around the SHGetFolderPath API to help you get any of the standard folders for all or the currently logged Windows user.

2、示例(DataRoot就是All User可以访问,对文件进行读写操作权限的目录)

char commonAppDataPath[MAX_PATH];

// [Current User]\My Documents     

0: specialFolder := CSIDL_PERSONAL;     

// All Users\Application Data     

1: specialFolder := CSIDL_COMMON_APPDATA;     

// [User Specific]\Application Data     

2: specialFolder := CSIDL_LOCAL_APPDATA;     

// Program Files     

3: specialFolder := CSIDL_PROGRAM_FILES;     

// All Users\Documents     

4: specialFolder := CSIDL_COMMON_DOCUMENTS;

BOOL re = SHGetSpecialFolderPathA(NULL, commonAppDataPath, CSIDL_COMMON_APPDATA, FALSE);

 string DataRoot = (string)commonAppDataPath + "\\Company Name\\Product Name";

 

参考链接:

(1) https://www.2cto.com/kf/201203/123234.html

(2) https://www.thoughtco.com/store-user-and-application-data-in-the-correct-location-1058164

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值