无法访问"程序文件"中的INI文件

Aba*_*Aba 3 c++ windows permissions file

我编写了这个需要检查INI文件("preference.ini")的C++应用程序,并最终修改它(例如,如果用户不想再看到介绍表单).我在WinXP中创建它,它在我编译它的系统上工作正常(在很多地方,包括"Program Files").

问题:

  1. 在Win 7中,如果我将完整的程序文件夹放在"C":""(例如"C:\ MyProgram")下,它可以正常工作,但如果我把它放在"C:\ Program Files(x86)\ MyProgram"中,它只是检索一些神秘的数据(我的INI文件中没有的值).当我更改一些设置并将它们保存到文件时,它(显然)保存更改(没有错误,但当我去打开文件时,更改不存在...
  2. 我在另一个WinXP系统的系统上遇到了类似的问题(不是我编译它的系统).

我使用'getcwd'来定义运行时的路径,并且我验证它正确,即使在"Program Files(x86)"下也是如此:

char currentPath[MAXPATH];
getcwd(currentPath, MAXPATH);
std::string licensePath(currentPath);
licensePath.append("\\dat\\preference.ini");'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?在此先感谢您的帮助.

Jas*_*ams 8

答案是@Kirill已经说过 - 除非你拥有高于正常的权限(以管理员身份运行),否则Win7不会让你将数据写入程序文件.在这种情况下,它可能会重定向您的文件写入,以便它们仍然可以工作,但数据本身不存储在Progam文件中.

添加到他的答案:一般情况下(除非您想以管理员身份运行您的应用程序),您不应将任何程序数据写入Program Files文件夹.

应用程序设置应存储在其中一个AppData文件夹中.您可以通过转到开始菜单搜索框(Vista/Win7)并输入来手动访问用户的appdata %appdata%.

要在代码中找到此位置,请将SHGetFolderPath与CSIDL_APPDATA(当前用户)或CSIDL_COMMON_APPDATA(所有用户)一起使用.