【问题标题】:QFile path changing from build version to deploy versionQFile 路径从构建版本更改为部署版本
【发布时间】:2017-01-09 18:46:00
【问题描述】:

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

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

【问题讨论】:

    标签: qt save qfile


    【解决方案1】:

    由于 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 冲突的任何内容

    【讨论】:

    • UAC 在哪些文件夹中起作用?
    • 我不太记得了,但是你可以在文件夹权限中看到。您可以检查您要写入的文件夹是否受 UAC 保护。
    • 非常感谢。您不仅告诉我问题出在哪里,还帮助我朝着正确的方向前进:)
    • 使用 LOCALAPPDATA 环境变量来查找应用程序数据的去向。在 cmd dir %LOCALAPPDATA%.您还可以让安装程序和应用程序代码始终明确使用该位置,除非您想使用其他位置,否则这将是正确的。
    • @AlexanderVX 但是如果我给出绝对路径,它不会在计算机之间改变吗?我应该通过路径的“正确方式”是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2021-12-21
    相关资源
    最近更新 更多