Qt setPermissions не устанавливает разрешения - PullRequest
3 голосов
/ 16 февраля 2011

Я не уверен, почему, но мой код ниже не устанавливает разрешения для файла. Не уверен, что может быть не так с кодом.

СИСТЕМА: Windows XP Pro 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;

Возвращаемое значение - ИСТИНА ... утверждает, что оно установило разрешения, но не установило. Для ясности, file2.txt является копией file1.txt. Я установил permisions для file1 как что-то, но file2.txt имеет другие разрешения после запуска моего кода.

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Как было написано QT не поддерживает изменение прав доступа для групп в Windows. Для полного контроля над правами доступа к файлам попробуйте использовать Access Control List, который находится в дескрипторе безопасности.

MSDN предлагает это:

Чтобы получить дескриптор безопасности файла или объекта каталога, вызовите функцию GetNamedSecurityInfo или GetSecurityInfo. Изменить дескриптор безопасности файла или объекта каталога, вызовите Функция SetNamedSecurityInfo или SetSecurityInfo.

Я думаю, что в вашем случае вы можете попробовать GetNamedSecurityInfo из первого файла и передать его SetNamedSecurityInfo для второго.


Также вы можете назначить NULL ACL, и он сбросит все групповые разрешения и предоставит полный доступ каждому:

SetNamedSecurityInfoA("C:\file.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL);
0 голосов
/ 17 февраля 2011

Поскольку вы упоминаете WinXP Pro SP2, я предполагаю, что ваши файлы находятся в NTFS.

Согласно документации Qt :

Обратите внимание, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...