2017-01-09 116 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