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
所以你可以朝这些方向移动:
- 运行 每次都以管理员身份程序。
- 更改目录的安全设置:转到属性,select 安全选项卡,然后高级。
- 您可以在 Wikipedia link.
上找到您的应用请求提升
- 将保存位置更改为更安全和常用的位置,例如文档或任何您想要的与 UAC 不冲突的位置
我有一个程序可以将数据保存在它自己的文件夹中。这是我保存数据的方式:
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
所以你可以朝这些方向移动:
- 运行 每次都以管理员身份程序。
- 更改目录的安全设置:转到属性,select 安全选项卡,然后高级。
- 您可以在 Wikipedia link. 上找到您的应用请求提升
- 将保存位置更改为更安全和常用的位置,例如文档或任何您想要的与 UAC 不冲突的位置