首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vista 64上用户桌面的QFileInfo权限不正确

vista 64上用户桌面的QFileInfo权限不正确
EN

Stack Overflow用户
提问于 2009-07-06 23:01:20
回答 3查看 1.6K关注 0票数 0

我使用以下代码来确定是否可以使用QFileInfo写入特定目录:

代码语言:javascript
复制
QFileInfo dinfo(dirname);
if (dinfo.exists())
  valid = dinfo.isWritable()

不幸的是,当我在Vista 64上传入当前用户桌面的路径时:

代码语言:javascript
复制
C:\Users\USERNAME\Desktop

QFileInfo::isWritable()返回false。但是,如果我向它传递另一个目录(比如C:\Temp),它将返回true。我从QFileInfo对象请求了5555的目录权限(任何人都不能写)。此代码可以在包括Windows XP在内的其他平台上正常工作。有没有人知道这里可能发生了什么。

作为参考,如果我取消选中,我实际上可以将文件保存到该位置,而不会出现问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-07 21:19:56

所以,在Qt上深入研究了Task Tracker之后,我发现QFileInfo::isWritable()只适用于文件,而不适用于目录。通过更改代码以询问我是否可以创建感兴趣的文件,而不是询问目录是否可写,我能够实现预期的结果:

代码语言:javascript
复制
QDir dir(dirname);
if (dir.exists())
{
  QFileInfo finfo(dir.absoluteFilePath(fname));
  valid = finfo.isWritable();
} 

谢谢。

票数 3
EN

Stack Overflow用户

发布于 2009-07-07 01:36:46

我在这里做了一个非常大胆的猜测,但是你有没有检查过它是一个链接,快捷方式,别名,还是其他的伪文件夹?在我看来,您可能会获得一个不可写的硬编码符号链接的权限,而不是它所指向的项目的权限。

来自isSymLink()文档(由我添加的粗体):

在Unix (包括Mac )上,打开符号链接实际上会打开链接的目标。在Windows上,它会打开.lnk文件本身。

因此,我将检查isSymLink()的结果,并在必要时从symLinkTarget()获取真正的目标(请参阅最后一个文档;该目标可能实际存在,也可能不存在)。

票数 0
EN

Stack Overflow用户

发布于 2009-07-07 08:04:38

目录"C:\Users\USERNAME\Desktop“在Windows Vista上默认为只读。这并不意味着您不能将文件写入该文件夹。这意味着您不能调整目录本身(名称更改等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1089598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档