2009-07-06 38 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”为只读。这并不意味着你不能将文件写入文件夹。这意味着你不能调整目录本身(名称改变等)。