Установка разрешения на чтение с помощью QFile(). SetPermissions()

В моей программе Qt 5.5.1 я должен изменить свои конфигурационные файлы с разрешения только на чтение и на чтение и запись... У меня есть 2 вопроса:

  1. Как я могу установить это разрешение? Я пытался: QFile(path).setPermissions(QFile::ReadWrite); Но он выдает эту ошибку компилятора:

    C2664: 'bool QFile:: setPermissions (const QString &, QFileDevice:: Permissions)': невозможно преобразовать аргумент 1 из 'QIODevice::OpenModeFlag' в 'QFileDevice::Permissions' Нет оператора пользовательского преобразования, который мог бы выполнить это преобразование, или оператор не может быть вызван

  2. Как получить разрешения для конкретного файла?

2 ответа

Решение

Правильный путь - используя правильный enum, выберите значение из QFileDevice::Permissions -enum вместо этого (я считаю, что это изменение Qt5). Fe:

QFile(path).setPermissions(QFileDevice::ReadOwner | QFileDevice::WriteOwner);

Чтобы получить права доступа к файлу, используйте .permissions() метод QFile:

QFileDevice::Permissions p = QFile(path).permissions();

Который возвращает все права доступа к файлу ИЛИ-ed вместе. Таким образом, чтобы проверить, установлено ли определенное разрешение, вы можете сделать что-то вроде:

if (p & QFileDevice::ReadOwner)
{
}

Как указано в сообщении об ошибке компилятора, вы передавали QIODevice::OpenModeFlag enum value to setPermissions(), QIODevice::OpenModeFlag используется для описания режима, в котором устройство открыто.

Здесь вам нужна комбинация значений из перечисления QFileDevice::Permission.

QFile(path).setPermissions(QFileDevice::ReadOwner | QFileDevice::WriteOwner);
Другие вопросы по тегам