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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как проверить существование устройств?  (Прочитано 5135 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Июнь 09, 2008, 10:46 »

Требуется сделать список существующих ком портов. Пробую так:
Код:
QDir dir(QString("/dev/"));
   foreach(QString device, dir.entryList(QStringList(QString("cu*"))))
   {
      //здесь код обработки найденного девайса
   }

При выполнении в "код обработки найденного девайса" не попадаю, хотя в системе есть такое устройство как /dev/cuad0. Если вызываю dir.entryList(QStringList(QString("*")))) - то по идее должен попадать в "код обработки найденного девайса" на каждом девайсе, но попадаю туда только при нахождении  "dumpdev", "fw0" и т.п. Эти устройства в mc подсвеченны серым и пишутся с собакой (@dumpdev, @fw0 и т.д.), а другие устройства, в том числе и куад подсвеченны розовым и пишутся с тире (-cuad0, -cuaU1, -ad0, -ad0s1a и т.д.).
Почему-то entryList() не добавляет в возвращяемый список "розовые" устройства. Почему? Как можно осуществить перебор всех устройств?
Записан
Alex03
Гость
« Ответ #1 : Июнь 09, 2008, 11:20 »

juvf похоже у тебя большие познания в линуксячьих файловых системах. Улыбающийся
Асистента читать не пробовал?
Цитировать
QDir::System -List system files (on Unix, FIFOs, sockets and device files)

Код:
dir.setFilter(QDir::System);

Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Июнь 09, 2008, 12:25 »

Alex03 Спасибо, помогло.

Познания не большие, учусь. ))

Если явно не указывать фильтр в entryList(), то фильтор берется по умолчанию, а по умолчанию это QDir::NoFilter, т.е. я так понял что это означает - "Не фильтровать, а выводить ВСЁ". Почему были зафильтрованны девайсы - непонятно.
Записан
Alex03
Гость
« Ответ #3 : Июнь 10, 2008, 05:36 »

Если явно не указывать фильтр в entryList(), то фильтор берется по умолчанию, а по умолчанию это QDir::NoFilter, т.е. я так понял что это означает - "Не фильтровать, а выводить ВСЁ". Почему были зафильтрованны девайсы - непонятно.
Потому что фильтр не у entryList(), а у QDir.

Цитировать
QDir::QDir ( const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ), Filters filters = AllEntries )

Constructs a QDir with path path, that filters its entries by name using nameFilter and by attributes using filters. It also sorts the names using sort.
The default nameFilter is an empty string, which excludes nothing; the default filters is AllEntries, which also means exclude nothing. The default sort is Name | IgnoreCase, i.e. sort by name case-insensitively.
If path is an empty string, QDir uses "." (the current directory). If nameFilter is an empty string, QDir uses the name filter "*" (all files).
Note that path need not exist.

Т.е. nameFilter и filters - понятия разные.
filters по умолчанию AllEntries.

Цитировать
enum QDir::Filter
flags QDir::Filters

This enum describes the filtering options available to QDir; e.g. for entryList() and entryInfoList(). The filter value is specified by combining values from the following list using the bitwise OR operator:
Constant   Value   Description
QDir::Dirs   0x001   List directories that match the filters.
QDir::AllDirs   0x400   List all directories; i.e. don't apply the filters to directory names.
QDir::Files   0x002   List files only.
QDir::Drives   0x004   List disk drives (ignored under Unix).
QDir::NoSymLinks   0x008   Do not list symbolic links (ignored by operating systems that don't support symbolic links).
QDir::NoDotAndDotDot   0x1000   Do not list the special entries "." and "..".
QDir::AllEntries   Dirs | Files | Drives   List directories, files, drives and symlinks (this does not list broken symlinks unless you specify System).
QDir::Readable   0x010   List files for which the application has read access. The Readable value needs to be combined with Dirs or Files.
QDir::Writable   0x020   List files for which the application has write access. The Writable value needs to be combined with Dirs or Files.
QDir::Executable   0x040   List files for which the application has execute access. The Executable value needs to be combined with Dirs or Files.
QDir::Modified   0x080   Only list files that have been modified (ignored under Unix).
QDir::Hidden   0x100   List hidden files (on Unix, files starting with a .).
QDir::System   0x200   List system files (on Unix, FIFOs, sockets and device files)
QDir::CaseSensitive   0x800   The filter should be case sensitive if the file system is case sensitive.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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