Qt设置权限不设置权限
Posted
技术标签:
【中文标题】Qt设置权限不设置权限【英文标题】:Qt setPermissions not setting permisions 【发布时间】:2011-02-16 20:17:56 【问题描述】:我不知道为什么,但下面的代码没有为文件设置权限。 不知道代码有什么问题。
系统: Windows XP 专业版 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 在我运行代码后具有不同的权限。
【问题讨论】:
【参考方案1】:就像written 一样,QT 不支持在 Windows 上更改组的访问权限。要完全控制文件权限,请尝试使用位于安全描述符中的访问控制列表。
MSDN suggests这个:
要检索文件或目录对象的安全描述符, 调用 GetNamedSecurityInfo 或 GetSecurityInfo 函数。改变 文件或目录对象的安全描述符,调用 SetNamedSecurityInfo 或 SetSecurityInfo 函数。
我认为在您的情况下,您可以尝试从第一个文件中获取 GetNamedSecurityInfo 并将其传递给第二个文件的 SetNamedSecurityInfo。
您还可以分配 NULL ACL,它将重置所有组权限并授予所有人完全访问权限:
SetNamedSecurityInfoA("C:\file.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL);
【讨论】:
【参考方案2】:既然你提到了 WinXP Pro SP2,我假设你的文件在 NTFS 上。
根据Qt's documentation:
请注意,Qt 默认情况下不会检查 NTFS 文件的权限 系统,因为这可能会降低文件处理的性能 相当。可以通过以下方式强制对 NTFS 进行权限检查 在您的源代码中包含以下代码:
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
然后通过递增和关闭权限检查 将 qt_ntfs_permission_lookup 减 1。
qt_ntfs_permission_lookup++; // turn checking on qt_ntfs_permission_lookup--; // turn it off again
【讨论】:
正确的 NTFS。不幸的是,你的建议没有奏效。返回的布尔值为 1,但 perms 仍然没有变化。事实上,除了代码运行速度较慢之外,没有什么区别。以上是关于Qt设置权限不设置权限的主要内容,如果未能解决你的问题,请参考以下文章