【问题标题】:QFileInfo::isWritable() returning false at full permissions on windows 7QFileInfo::isWritable() 在 Windows 7 上以完全权限返回 false
【发布时间】:2012-04-25 22:59:24
【问题描述】:
QFile file(filePath);
QFileInfo fileInfo(file);

file.open(QIODevice::ReadWrite); //or WriteOnly

if(!fileInfo.isWritable())
{
    //Log error
}
else
{
    //Save to file
}

问题是,文件路径具有完全访问权限,文件已创建并可写,但 isWritable() 仍然返回 false。如果我删除写访问检查并简单地写入文件,则写入成功。 QFile::open 也返回 true。有什么想法吗?

【问题讨论】:

    标签: windows qt file-permissions


    【解决方案1】:

    尝试以管理员身份运行您的程序(右键单击它)。也许这个问题是由 UAC 引起的。

    【讨论】:

    • 文件的完整路径是什么?你的账户是什么类型的用户,普通用户还是管理员?
    【解决方案2】:

    QFileInfo::isWritable()不是检查打开的文件是否可写,而是检查当前用户对该文件的权限。如果您只想查看打开文件操作是否成功,请检查调用 QFile::open() 的返回值。如果它返回 true,则文件已准备好写入。如果返回 false,请进行错误处理。

    我不知道为什么 isWritable() 在你的情况下会失败。可能是 Windows 认为该文件已打开,因此无法从另一个 open() 调用中写入。如果您确实要检查权限,请在打开文件之前致电isWritable()

    【讨论】:

    • 如果您查看我的帖子,您会发现我已经尝试检查 open() 的返回值(返回 true)。刚刚尝试在打开文件之前调用isWritable(),仍然返回false。如果你说的是真的,那么我的检查不会在open() 调用中失败,一切都会按预期进行。
    • 似乎可行,这个解决方案也兼容 Unix(在 Ubuntu 和 Kubuntu 上测试)。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多