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

Programmatically remove all permissions of a file

本文关键字:权限 文件 编程 方式 删除      更新时间:2023-10-16

在Linux操作系统中,chmod可以将给定文件的权限设置为none,即:没有人可以read/write/exec这个文件。(维基百科-八进制模式)

如何做同样的Qt?
我知道有QFile::setPermissionsenum QFile::Permission,但在enum中没有值none

QFile::setPermissions(0)清除所有权限,就像Linux上的chmod一样。


Windows更新

根据Qt QFile文档:

Qt对文件权限的理解是有限的,这会影响特别是QFile::setPermissions()函数。在Windows上,Qt可以set 只设置旧的只读标志,并且只有在没有传递Write*标志。Qt不操纵访问控制列表(acl),这使得此功能对NTFS卷几乎毫无用处。它对于使用VFAT文件系统的u盘可能仍然有用。POSIXacl也不会被操纵。

因此,在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++的答案中发现的最后一个技巧使用

删除windows中的只读文件

由于Permissions只是QFlags<Permission>的类型定义,因此可以这样使用构造函数QFlags<Permission>(Zero zero = 0):

file.setPermissions(Permissions());

or -在c++ 11中:

file.setPermissions({});