2009-07-06 63 views
0

我使用下面的代碼,以確定是否我可以對特定的目錄使用寫QFileInfo:當我通過在當前用戶的路徑不正確的QFileInfo權限64

QFileInfo dinfo(dirname); 
if (dinfo.exists()) 
    valid = dinfo.isWritable() 

不幸的是,桌面上的Vista 64:

C:\Users\USERNAME\Desktop 

QFileInfo :: isWritable()返回false。但是,如果我將它傳遞給另一個目錄(比如C:\ Temp),它將返回true。我要求QFileInfo對象的目錄權限是5555(不能被任何人寫入)。此代碼在包括Windows XP在內的其他平臺上按預期工作。任何人對這裏可能發生的事情都有任何想法。

作爲一個參考點,如果我刪除了支票,我實際上可以將文件保存到該位置而沒有問題。

回答

3

因此,在Qt中通過任務跟蹤器挖掘一下之後,我發現QFileInfo :: isWritable()僅適用於文件而不是目錄。通過改變代碼來問我是否能產生利益而不是問如果目錄是可寫的文件,我能夠達到預期的結果:

QDir dir(dirname); 
if (dir.exists()) 
{ 
    QFileInfo finfo(dir.absoluteFilePath(fname)); 
    valid = finfo.isWritable(); 
} 

感謝。

0

我在這裏做了一個非常瘋狂的猜測,但是你檢查過它是否是一個鏈接,快捷方式,別名或其他僞文件夾?對我來說,似乎有可能獲得硬編碼符號鏈接的權限,該符號鏈接不可寫,而不是它指向的項目的權限。

isSymLink()文件(由我大膽的加入):

在Unix(包括Mac OS X),有效地打開一個符號鏈接,打開鏈接的目標。 在Windows上,它會打開.lnk文件本身。

所以我會檢查的結果isSymLink(),並在必要時得到symLinkTarget()真正的目標(並看到最後的文件;目標可能會或可能不會實際存在)。

0

默認情況下,Windows Vista上的目錄「C:\ Users \ USERNAME \ Desktop」爲只讀。這並不意味着你不能將文件寫入文件夾。這意味着你不能調整目錄本身(名稱改變等)。