2014-08-29 60 views
0

在我當前的項目中,我喜歡使用fopenfopen_s通過「w」選項創建文件。替代管理員權限 - fopen不會在windows中創建C: temp.txt

使用QT GUI,用戶可以選擇任何基本上是文件對話框的返回字符串的文件名 - 類似於windows對話框中已知的。

QFileDialog::getSaveFileName(this,"Save as...","","all files (*.*)"); 

但是,取決於文件名是否被創建。

因此,舉例來說,我可以在我的build目錄寫入文件「C:/SVN/builds/GUI/temp.txt」
我可以在Windows桌面上創建文件「C:/用戶/ XXX /臺式機/ temp.txt'
我甚至可以在其他生成目錄'C:/SVN/builds/foo/bin/Release/temp.txt'
中創建文件但是fopen不允許我創建'C:/temp.txt 「返回‘拒絕訪問’(errorno 13

我的問題是可以解決的喜歡這裏描述:https://stackoverflow.com/a/4735652/2220850
但是這實際上要求用戶具有管理權我的愚蠢的小工具正常運行。

所以沒有另外一種方法來獲得用戶從GUI中選擇的文件的寫權限?
或者至少對於用戶和我來說,有一種方法可以知道我們的工具在磁盤上的哪個位置可能創建文件,也可能不創建文件?

乾杯

+0

有Shell API可以找出放置東西的位置。 – 2014-08-29 14:44:17

+0

「KNOWNFOLDERID」和「CSIDL」的MSDN。 – 2014-08-29 14:46:49

回答

0

我不認爲你可以用乾淨的方式解決這個問題。有非管理員用戶禁止使用的文件夾。就是這樣(沒有調整操作系統設置)。

向用戶顯示一個明智的錯誤消息,如「拒絕訪問(您可能需要管理員權限才能寫入此目錄,選擇一個您可能要寫入的目錄)」可能是最好的方法。

+0

有專門的shell調用來生成具有所需屬性的文件夾路徑。 – 2014-08-29 14:52:41

+1

這不會解決C:/temp.txt問題嗎?這也不是跨平臺的,也不是Qt。無論如何,也許你的建議有助於OP。 – Silicomancer 2014-08-29 15:31:09

0

讀/寫shell/OS告訴你你可以/應該做的事情。調用shell API以找出適用於Windows操作系統的正確路徑:

SHGetFolderPath() 
SHGetKnownFolderPath()