2017-01-09 2 views
3

У меня есть программа, которая сохраняет данные внутри собственной папки. Это, как я сохранить данные:Путь QFile меняется с версии сборки для развертывания версии

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. Почему это происходит в такой другой папке?

EDIT: Через несколько тестов выяснилось, что проблема не в установщике, а в том месте, где она установлена. По какой-то причине, когда я передаю свою программу на C:\Program Files (x86), данные всегда сохраняются в C:\Users\SOCC\AppData\Local\VirtualStore\Program Files (x86)\SOCC_Pesquisa\config\Values. это из-за пользователя? или, возможно, права администратора?

ответ

4

Из-за функций безопасности, представленных в Windows Vista (UAC), любая программа, не являющаяся администратором, которая пытается записать в защищенные места, такие как «Program Files», получит их записи, которые пойманы и перенаправлены в альтернативное «удобное для пользователя» местоположение.

В случае вам 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

В каких папках делает акт контроля учетных записей? – andseg

+0

Я действительно не помню, но вы можете увидеть его в разрешениях папки. Вы можете проверить, является ли папка, которую вы хотите записать, защищенной UAC. –

+0

Большое спасибо. Не только ты сказал мне, в чем проблема, но и помог мне в правильном направлении :) – andseg

Смежные вопросы