【问题标题】:Qt setPermissions not setting permisionsQt设置权限不设置权限
【发布时间】: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 在我运行代码后具有不同的权限。

【问题讨论】:

    标签: qt qt4


    【解决方案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 仍然没有变化。事实上,除了代码运行速度较慢之外,没有什么区别。
      猜你喜欢
      • 2018-12-06
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多