QFile 路径从构建版本更改为部署版本

QFile path changing from build version to deploy version

我有一个程序可以将数据保存在它自己的文件夹中。这是我保存数据的方式:

QString path = "./config/Values/"+Name+"/";
QDir *myDir = new QDir();
myDir->mkpath(path);
path += Name+"_";
path += Date+".txt";
QFile File(path);
QTextStream Out(&File);
Out.setCodec("UTF-8");
if(!File.open(QFile::WriteOnly | QFile::Text))
   return;
out << data;
File.close();

每次我运行程序通过QT,保存的数据都会去路径:C:\Andre\Qt files\build-Pesquisa-Desktop_Qt_5_7_0_MinGW_32bit-Release\release\config\Values。为了清楚起见,我将发送完整路径。

但是,我为该程序制作了一个安装程序。该程序安装在 C:\Program Files (x86)\SOCC_Pesquisa。所以新路径应该是:C:\Program Files (x86)\SOCC_Pesquisa\config\Values对吧?

虽然,当我 运行 程序并检查数据保存位置时,我得到了这个路径:C:\Users\SOCC\AppData\Local\VirtualStore\Program Files (x86)\SOCC_Pesquisa\config\Values。怎么突然变成这么不同的文件夹了?

编辑:通过一些测试我发现问题不在安装程序中,而是在安装的地方。出于某种原因,当我将我的程序传递给 C:\Program Files (x86) 时,数据总是保存在 C:\Users\SOCC\AppData\Local\VirtualStore\Program Files (x86)\SOCC_Pesquisa\config\Values 中。是因为用户吗?或者管理员权限?

由于 Windows Vista (UAC) 引入的安全功能,任何试图写入受保护位置(例如 "Program Files" 的非管理员程序都将捕获其写入并重定向到替代 "user friendly"位置。

你的情况C:\Users\SOCC\AppData\Local\VirtualStore\Program Files (x86)\SOCC_Pesquisa\config\Values

您可以了解有关 UAC 的更多信息here on Wikipedia

所以你可以朝这些方向移动:

  1. 运行 每次都以管理员身份程序。
  2. 更改目录的安全设置:转到属性,select 安全选项卡,然后高级。
  3. 您可以在 Wikipedia link.
  4. 上找到您的应用请求提升
  5. 将保存位置更改为更安全和常用的位置,例如文档或任何您想要的与 UAC 不冲突的位置