Qt的setPermissions无法设置权限

3

我不确定为什么,但是下面的代码无法设置文件的权限。不确定代码哪里出了问题。

系统: Windows XP Pro SP2。 作为管理员在管理员帐户中运行。 最新的Qt框架和文件。

//Get file permissions of ref file.
QFile::Permissions qpPerm1;
qpPerm1 = QFile::permissions("E:/dir1/dir2/File1.txt");

//Set file permissions of a file.
bool isOK=0;
isOK = QFile::setPermissions("E:/dir4/dir5/file2.txt",qpPerm1);
qout << "Perms set? " << isOK << endl;

返回值为TRUE,声称已设置权限,但实际上并没有。需要明确的是,file2.txt是file1.txt的副本。我将file1的权限设置为某些内容,但在运行代码后,file2.txt的权限不同。

2个回答

2
由于其已经编写,因此QT不支持在Windows上更改组访问权限。要完全控制文件权限,请尝试使用位于安全描述符中的访问控制列表。 MSDN建议如下:
要检索文件或目录对象的安全描述符,请调用GetNamedSecurityInfo或GetSecurityInfo函数。要更改文件或目录对象的安全描述符,请调用SetNamedSecurityInfo或SetSecurityInfo函数。
我认为在您的情况下,您可以尝试从第一个文件中获取GetNamedSecurityInfo,并将其传递给第二个文件的SetNamedSecurityInfo。
您也可以分配NULL ACL,它将重置所有组权限并授予每个人完全访问权限:
SetNamedSecurityInfoA("C:\file.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL);

0

既然你提到了WinXP Pro SP2,我就假设你的文件是在NTFS上。

根据Qt的文档

Note that Qt does not by default check for permissions on NTFS file systems, as this may decrease the performance of file handling considerably. It is possible to force permission checking on NTFS by including the following code in your source:

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

Permission checking is then turned on and off by incrementing and decrementing qt_ntfs_permission_lookup by 1.

qt_ntfs_permission_lookup++; // turn checking on
qt_ntfs_permission_lookup--; // turn it off again

修正NTFS。不幸的是,您提出的建议没有起作用。返回的布尔值为1,但权限仍然没有改变。实际上除了代码运行得更慢之外,没有任何区别。 - user440297

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接