Qt设置权限不设置权限

时间:2011-02-16 20:17:56

标签: qt qt4

我不确定为什么,但我的代码下面没有为文件设置权限。 不确定代码会出现什么问题。

SYSTEM: Windows XP专业版SP2。 以admin身份在Admin帐户中运行。 最新的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的permisions设置为某些内容,但是在运行我的代码后,file2.txt具有不同的权限。

2 个答案:

答案 0 :(得分:2)

因为它是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);

答案 1 :(得分:0)

由于您提到的是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