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

xiaoxiao2025-10-21  6

      开发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

 
转载请注明原文地址: https://www.6miu.com/read-5038289.html

最新回复(0)