以编程方式删除文件的所有权限

时间:2015-09-21 15:45:02

标签: c++ qt

在Linux上,chmod可以将给定文件的权限设置为none,即。没有人可以read/write/exec这个文件。 (Wikipedia - Octal modes

如何对Qt做同样的事情? 我知道有QFile::setPermissionsenum QFile::Permission,但在枚举中没有值none

2 个答案:

答案 0 :(得分:4)

QFile::setPermissions(0)清除Linux上的chmod所有权限。

Windows更新

根据Qt QFile文件:

  

Qt对文件权限的理解是有限的,这会影响到   尤其是QFile::setPermissions()函数。在Windows上,Qt会   设置只保留传统的只读标志,并且只有当没有时才设置   写*标志被传递。 Qt不操纵访问控制列表   (ACL),这使得这个功能对NTFS卷几乎没用。它   可能仍然适用于使用VFAT文件系统的USB记忆棒。 POSIX   也不会操纵ACL。

因此,在Windows上,可以使用QFile::setPermissions()设置或取消设置旧版只读标志。 使用该功能也很棘手。要设置只读标志,只应配置一些“读取”权限。但是,要删除该标志,应添加写入权限,例如:

// set Windows read-only file flag
file.setPermissions(QFile::ReadOther);
// remove Windows read-only file flag
file.setPermissions(QFile::ReadOther | QFile::WriteOther);

我在Qt C++ remove a read only file in windows using

的答案中找到的最后一招

答案 1 :(得分:1)

由于Permissions只是QFlags<Permission>的typedef,因此您可以使用构造函数QFlags<Permission>(Zero zero = 0)

file.setPermissions(Permissions());

或 - 在C ++ 11中:

file.setPermissions({});