2017-01-09 5 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)에서 도입 된 보안 기능으로 인해 "프로그램 파일"과 같은 보호 된 위치에 쓰기를 시도하는 비 관리자 프로그램은 쓰기를 가져 와서 대체 "사용자에게 친숙한"위치로 리디렉션합니다.

경우 당신에 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
+0

와 충돌하지 원하는 문서 나 같은,보다 안전하고 평소에 저축 위치? – andseg

+0

정말 기억이 나지 않지만 폴더 권한에서 볼 수 있습니다. 쓰기를 원하는 폴더가 UAC로 보호되어 있는지 확인할 수 있습니다. –

+0

고맙습니다. 너는 문제가 무엇인지 내게 말했을뿐만 아니라 내가 올바른 방향으로 나아갈 수 있도록 도왔다. – andseg