Russian Qt Forum
Ноябрь 01, 2024, 04:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему не работает фильтр QDir (QT 4.6.2, Windows XP)  (Прочитано 5891 раз)
spectre71
Гость
« : Апрель 30, 2010, 11:08 »

fileview.exe - Deny на Read & Execute
Попытка его запустить соответственно выдает ошибку, здесь все хорошо.

Однако следующий код работает некорректно:
Код
C++ (Qt)
   QString Viewer = "";
   QDir AppDir = QDir(qApp->applicationDirPath());
   QStringList list;
   list << "fileview*";
   list = AppDir.entryList(list, QDir::Readable|QDir::Files|QDir::Executable);
   for(int i=0; i<list.count(); i++) {
     if(list[i] == "fileview" || list[i] == "fileview.exe") {
       Viewer = AppDir.absoluteFilePath(list[i]);
       break;
     }
   }
 

На выходе получаем путь Viewer - на fileview.exe.
Почему не трабатывают флаги QDir::Readable|QDir::Files|QDir::Executable
Записан
spectre71
Гость
« Ответ #1 : Апрель 30, 2010, 11:22 »

Все, вспомнил! Для винды надо так:

Код
C++ (Qt)
#ifdef Q_OS_WIN
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
#endif  
 
...
...
 
   QString Viewer = "";
   QDir AppDir = QDir(qApp->applicationDirPath());
   QStringList list;
   list << "fileview*";
#ifdef Q_OS_WIN
 qt_ntfs_permission_lookup++;
#endif  
   list = AppDir.entryList(list, QDir::Readable|QDir::Files|QDir::Executable);
#ifdef Q_OS_WIN
 qt_ntfs_permission_lookup--;
#endif  
   for(int i=0; i<list.count(); i++) {
     if(list[i] == "fileview" || list[i] == "fileview.exe") {
       Viewer = AppDir.absoluteFilePath(list[i]);
       break;
     }
   }
Записан
ритт
Гость
« Ответ #2 : Май 03, 2010, 20:26 »

именно!
Записан
blood_shadow
Гость
« Ответ #3 : Август 27, 2010, 17:44 »

Для винды надо так:


Добрый день, у меня похожая проблема не работает фильтр
Код:
 QDir obj("D:/123");

    QString strList;
    QStringList Filter;
    Filter << "*.olp";

    foreach(QString str, obj.entryList(Filter, QDir::Files)){
        strList = str;
        strList.replace(QString("olp"), QString("olp9"));
        if (!obj.rename(str, strList)) cout << "False" << endl;
    }

если написать
Код:
 foreach(QString str, obj.entryList(QDir::Files)) 
'то работает, но только берет все файлы
может у вас есть решение, если оно представлено в вашем втором посте, объясните пожалуйста что делают эти дериктивы препроцессора
ОС Windows 7
Записан
merke
Гость
« Ответ #4 : Август 27, 2010, 18:27 »

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:
Код:
[b]
 extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;[/b]

Permission checking is then turned on and off by incrementing and decrementing qt_ntfs_permission_lookup by 1.

Код:
[b] qt_ntfs_permission_lookup++; // turn checking on
 qt_ntfs_permission_lookup--; // turn it off again[/b]

The Permissions type is a typedef for QFlags<Permission>. It stores an OR combination of Permission values.
Записан
blood_shadow
Гость
« Ответ #5 : Август 27, 2010, 18:54 »

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:
Код:
[b]
 extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;[/b]

Permission checking is then turned on and off by incrementing and decrementing qt_ntfs_permission_lookup by 1.

Код:
[b] qt_ntfs_permission_lookup++; // turn checking on
 qt_ntfs_permission_lookup--; // turn it off again[/b]

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

Я так понимаю эти строки
Код:
#ifdef Q_OS_WIN
  qt_ntfs_permission_lookup++;
#endif 
    list = AppDir.entryList(list, QDir::Readable|QDir::Files|QDir::Executable);
#ifdef Q_OS_WIN
  qt_ntfs_permission_lookup--;
#endif 

дают права на доступ к директории?
Записан
merke
Гость
« Ответ #6 : Август 27, 2010, 18:55 »

Быстрее идет обработка
Записан
blood_shadow
Гость
« Ответ #7 : Август 27, 2010, 19:00 »

Быстрее идет обработка
извиняюсь за назойливый вопрос(немного проблемы с инглишем), из-за чего проходит сборка это как-то связано с правами доступа к диску?
Записан
merke
Гость
« Ответ #8 : Август 27, 2010, 19:03 »

вот тебе перевод:

Обратите внимание, что Qt по умолчанию не может проверить разрешений на NTFS файловыми системами, так как это может снизить производительность обработки файлов значительно. Можно заставить разрешение на проверку NTFS, включив следующий код в ваш источник:
Код:

 внешних Q_CORE_EXPORT qt_ntfs_permission_lookup Int


Разрешение проверки затем включать и выключать, увеличивая и уменьшение qt_ntfs_permission_lookup на 1.

Код:

qt_ntfs_permission_lookup + +; / / включить проверку
 qt_ntfs_permission_lookup - / / выключить ее снова


Разрешения типа ЬурейеЕ для QFlags <Permission>. Она хранит или сочетание Разрешение значений.
Записан
blood_shadow
Гость
« Ответ #9 : Август 27, 2010, 19:17 »

вот тебе перевод:

Обратите внимание, что Qt по умолчанию не может проверить разрешений на NTFS файловыми системами, так как это может снизить производительность обработки файлов значительно. Можно заставить разрешение на проверку NTFS, включив следующий код в ваш источник:
Код:

 внешних Q_CORE_EXPORT qt_ntfs_permission_lookup Int


Разрешение проверки затем включать и выключать, увеличивая и уменьшение qt_ntfs_permission_lookup на 1.

Код:

qt_ntfs_permission_lookup + +; / / включить проверку
 qt_ntfs_permission_lookup - / / выключить ее снова


Разрешения типа ЬурейеЕ для QFlags <Permission>. Она хранит или сочетание Разрешение значений.

Хорошо каким образом влияют права на доступ к файлам и директориям на производительность обработки файлов? и почему тогда включив проверку прав, можно ускорить выполнение, или это означает что если директория не доступна для просмотра то она будет проигнорирована а в случае отсутствия проверки программа будет пытаться долгое время к ней достучатся?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.128 секунд. Запросов: 21.