我使用以下代码确定是否可以使用QFileInfo写入特定目录:
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在内的其他平台上按预期工作。任何人都对这里可能发生的事情有任何想法。
作为参考,如果删除支票,我实际上可以将文件保存到该位置而不会出现问题。
答案 0 :(得分:3)
因此,在Qt上通过任务跟踪器进行了一些挖掘之后,我发现QFileInfo :: isWritable()仅对文件而不是目录有效。通过更改代码来询问我是否可以创建感兴趣的文件而不是询问目录是否可写,我能够实现预期的结果:
QDir dir(dirname);
if (dir.exists())
{
QFileInfo finfo(dir.absoluteFilePath(fname));
valid = finfo.isWritable();
}
感谢。
答案 1 :(得分:0)
我在这里做了一个非常疯狂的猜测,但你检查过它是否是链接,快捷方式,别名或其他伪造的文件夹?我觉得你可以获得一个不可写的硬编码符号链接的权限,而不是它所指向的项目的权限。
从isSymLink()
文档(我添加的粗体):
在Unix(包括Mac OS X)上,打开符号链接可以有效地打开链接的目标。 在Windows上,它会打开.lnk文件。
所以我会检查isSymLink()
的结果,如有必要,从symLinkTarget()
获取真实目标(并查看最后一个文档;目标可能实际存在,也可能不存在)。
答案 2 :(得分:0)
目录“C:\ Users \ USERNAME \ Desktop”在Windows Vista上默认为只读。这并不意味着您无法将文件写入该文件夹。这意味着您无法调整目录本身(名称更改等)。