我不确定为什么,但我的代码下面没有为文件设置权限。 不确定代码会出现什么问题。
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具有不同的权限。
答案 0 :(得分:2)
因为它是written QT不支持更改Windows上的组的访问权限。要完全控制文件权限,请尝试使用位于安全描述符中的访问控制列表。
要检索文件或目录对象的安全描述符, 调用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默认情况下不会检查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