2013-10-03 50 views
0

所以我有一個Qt程序,可以將文件保存在其他文件中。我在C:/目錄下保存了一些文件。當我在Windows資源管理器,cygwin或我的命令提示符下查找文件時,找不到該文件。我檢查了我的文件夾選項,看起來很好。儘管無法找到該文件,但當我需要在我的Qt程序中加載文件時,程序能夠找到該文件。只有我的程序能夠找到該文件,Windows不能。我以管理員身份登錄,但這可能與權限有關嗎?Qt,windows無法找到文件,Qt打開文件對話框可以

另外值得一提的是,當我將文件保存在c:/ users/me/Documents/folder /文件夾中時,我似乎沒有問題。打開文件

QString saveFileName = QFileDialog::getSaveFileName(this,"Select the file you wish to save to.","",""); 

QFile saveFile(saveFileName); 

if(saveFile.open(QIODevice::WriteOnly)) 
{ 
    QTextStream stream(&saveFile); 
    QString stringToSaveToFile; 
    stream << stringToSaveToFile; 
    saveFile.close(); 
} 
else 
{ 
    QMessageBox::warning(this, "Error", "Cannot open file."); 
} 

代碼::用來保存文件

代碼

QString selectedFile = QFileDialog::getOpenFileName(this, "Select a .pro file.", "", tr("Profile file (*.pro);;All (*.*)")); 

QString fileContents; 
QFile file(selectedFile); 

if (file.open(QIODevice::ReadOnly) | (QIODevice::Text)) 
{ 
    QTextStream in(&file); 
    fileContents = in.readAll(); 
} 
else 
{ 
    QMessageBox::warning(this, "Error", "Unable to open file."); 
} 

編輯:只是嘗試這樣在不同的計算機上。我的電腦有Windows 8,另一臺電腦有Windows XP。我無法在XP機器上覆制問題。

編輯:

我相信我已經找到了問題所在(http://answers.microsoft.com/en-us/windows/forum/windows_vista-files/windows-explorer-compatibility-files/5b377209-cfe4-4be6-959d-e1de4b8be16d),但我仍然試圖找出如何解決它。

我試圖保存到c:/目錄的文件實際上保存在C:/用戶名/用戶名/ AppData/Local/VirtualStore中。

有沒有辦法以某種方式重寫這個?

+0

您是否檢查過它是否正確寫入c:\ - 換句話說,您是否在調試器下檢查和/或檢查錯誤代碼?你也應該發佈代碼 – Huy

回答

0

現在我的解決方案是警告用戶,如果他們保存在C:/,C:/ Program Files /,C:/ Program Files(x86)或C:/ Windows /目錄中。保存在這些目錄中的所有文件實際上都保存在C:/ User/當前用戶/AppData/Local/VirtualStore /中。

如果有人有更好的解決方案讓我知道。

0

即使您可能以管理員身份登錄,但默認情況下,大多數程序都是以未升級的模式運行(基本上不是管理員)。另外,默認情況下,未升級的程序不具有對C:驅動器上的根目錄的寫入權限(與他們無權寫入的方式相同,例如,C:\Program Files\)。這並非總是如此 - 我現在還不記得,但我認爲寫入程序文件已經在Windows XP中受到保護,並且C:僅在之後才受到保護,至少從Windows 7開始,我認爲是這樣?無論如何,出於兼容性原因,寫入這些受保護的目錄是虛擬化的。

嘗試在提升模式下運行您的Qt應用程序(右鍵單擊 - >以管理員身份運行,或右鍵單擊 - >屬性 - >兼容性 - >以管理員身份運行此程序),如果您想直接在C:\ ,你不應該。

如果您真的擔心用戶對此感到困惑,您可以在用戶選擇文件位置之後,但在實際寫入之前實施寫訪問檢查 - 並顯示警告或讓他們選擇其他位置。

+0

是的,以管理員身份運行。我真的不希望該程序自動運行爲管理員,我不希望許多將使用此應用程序的人將有意義以管理員身份運行。 –