2017-01-09 92 views
3

我有一个程序,它里面自己的文件夹保存数据。这就是我如何保存数据:一个QFile路径从Build版本改变部署版本

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中。是因为用户吗?或者也许管理员权限?

回答

4

由于与Windows Vista(UAC),试图写如“程序文件”保护位置的任何非管理员节目中介绍的安全功能会得到他们写捕获并重定向到一个替代“用户友好”的位置。

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

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

所以,你可以在这些方向移动:

  1. 每次运行程序作为管理员。
  2. 更改目录的安全设置:正在进行的属性,选择安全选项卡,然后高级。
  3. 请求海拔为您的应用程序,你可以找到关于Wikipedia link
  4. 更改选址节约一个更加安全和往常一样,像文件或任何你想不UAC
+0

相冲突在哪些文件夹不UAC的行为吗? – andseg

+0

我不太记得,但你可以在文件夹权限中看到它。您可以检查您要写入的文件夹是否受UAC保护。 –

+0

非常感谢。不仅你告诉我什么是问题,而且帮助我走向正确的方向:) – andseg