Есть ли способ избежать nameFilters в QDirIterator? - PullRequest
2 голосов
/ 29 января 2020

У меня есть [ThisIs] MyFile.zip файл в текущем каталоге. У меня также есть следующий код:

QDirIterator it("./", QStringList("[ThisIs] MyFile.zip"), QDir::Files);
bool has_next = it.hasNext();

Почему has_next возвращает false? Возможно, из-за символов в квадратных скобках в имени файла.
Есть ли какой-нибудь способ экранирования этих символов?

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Фильтры имен нигде не задокументированы. Но вполне разумно предположить, что они работают так же, как QDir :: setNameFilters , что означает, что они используют подстановочные строки .

Следующее должно работать:

QDirIterator it("./", QStringList("[[]ThisIs[]] MyFile.zip"), QDir::Files);
1 голос
/ 29 января 2020

См. Документацию для аналогичной функции здесь и некоторую документацию о сопоставлении с подстановочными знаками в Qt

Каждый фильтр имен является фильтром с подстановочными знаками (globbing), который понимает * а? подстановочные знаки.

По сути, вы не можете использовать параметр filter так, как вы его используете. Вы можете сделать что-то вроде

QDirIterator it("./", QStringList("*.zip"), QDir::Files);

И оттуда проверять каждый файл на свое имя "[ThisIs] MyFile.zip". Но использование фильтров для выполнения чего-либо, кроме подстановочных выражений, недопустимо в Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...