Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hordi от Август 27, 2009, 13:56



Название: Не работает определение прав на каталог
Отправлено: Hordi от Август 27, 2009, 13:56
Приветствую

Есть каталог с закрытыми  правами на чтение и исполнение - хочу узнать что это так. Использую нифеприведенный код, но он не работает так как ожидал (b всегда TRUE). В чем проблема?

Qt-4.5.2

Код:
  QFile::Permissions perm = QFileInfo( "c:/ACCESS_DENIED/" ).permissions(); 

  bool 

  b = perm & QFile::ReadOwner;
  b = perm & QFile::WriteOwner;
  b = perm & QFile::ExeOwner;

  b = perm & QFile::ReadUser;
  b = perm & QFile::WriteUser;
  b = perm & QFile::ExeUser;

  b = perm & QFile::ReadGroup;
  b = perm & QFile::WriteGroup;
  b = perm & QFile::ExeGroup;

  b = perm & QFile::ReadOther;
  b = perm & QFile::WriteOther;
  b = perm & QFile::ExeOther;

 


Название: Re: Не работает определение прав на каталог
Отправлено: DenKor от Август 27, 2009, 14:37
Попробуй оператор &&.


Название: Re: Не работает определение прав на каталог
Отправлено: Пантер от Август 27, 2009, 14:46
Под виндой permissions не работает.


Название: Re: Не работает определение прав на каталог
Отправлено: Hordi от Август 27, 2009, 14:52
>Под виндой permissions не работает.

Новость для меня... А можете указать где это в документации написано?
А какие варианты еще есть кроме юзать Qt для этой цели (мож API-функцию какую подскажите)?


Название: Re: Не работает определение прав на каталог
Отправлено: crackedmind от Август 27, 2009, 17:15
Как это не работает ???

Код
C++ (Qt)
    extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
    qt_ntfs_permission_lookup++;
   QFile::Permissions perm = QFileInfo( "c:/System Volume Information" ).permissions();
 
 
 bool
 
 b = perm & QFile::ReadOwner;
 qWarning() << b; // false
 b = perm & QFile::WriteOwner;
 qWarning() << b; // false
 b = perm & QFile::ExeOwner;
 qWarning() << b; // true
 
 b = perm & QFile::ReadUser;
 qWarning() << b; // false
 b = perm & QFile::WriteUser;
 qWarning() << b; // false
 b = perm & QFile::ExeUser;
 qWarning() << b; //true
 
 b = perm & QFile::ReadGroup;
 qWarning() << b; // true
 b = perm & QFile::WriteGroup;
 qWarning() << b; // true
 b = perm & QFile::ExeGroup;
 qWarning() << b; // true
 
 b = perm & QFile::ReadOther;
 qWarning() << b; // false
 b = perm & QFile::WriteOther;
 qWarning() << b; // false
 b = perm & QFile::ExeOther;
 qWarning() << b;// true

Цитировать
Warning: Because of differences in the platforms supported by Qt, the semantics of ReadUser, WriteUser and ExeUser are platform-dependent: On Unix, the rights of the owner of the file are returned and on Windows the rights of the current user are returned. This behavior might change in a future Qt version.

Note that Qt does not by default check for permissions on NTFS file systems, as this may decrease the performance of file handling considerably. It is possible to force permission checking on NTFS by including the following code in your source:

 extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
Permission checking is then turned on and off by incrementing and decrementing qt_ntfs_permission_lookup by 1.

 qt_ntfs_permission_lookup++; // turn checking on
 qt_ntfs_permission_lookup--; // turn it off again

The Permissions type is a typedef for QFlags<Permission>. It stores an OR combination of Permission values.


Название: Re: Не работает определение прав на каталог
Отправлено: Пантер от Август 27, 2009, 17:28
Тьфу, совсем забыл про это. Каюсь.


Название: Re: Не работает определение прав на каталог
Отправлено: Hordi от Август 28, 2009, 09:52
Спасибо ОГРОМНОЕ! Избавили меня от юзания WinAPI!