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设置权限不设置权限的主要内容,如果未能解决你的问题,请参考以下文章

qt android 7 应该怎么加权限

QT在linux环境下读取和设置系统时间(通过system来直接调用Linux命令,注意权限问题)

svn权限设置问题

暗黑战网GM权限设置

delphi+access权限管理设置

ASP.NET权限如何设置?