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

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

Голосование
Вопрос: должны ли папки со спец.именами (. и ..) быть скрытыми?  (Голосование закончилось: Октябрь 31, 2009, 04:31)
всегда - 7 (31.8%)
в случае ".hiddendir/." или ".hiddendir/subdir/.." - 9 (40.9%)
в случае вложенности ".hiddendir/*" - 2 (9.1%)
никогда - 4 (18.2%)
Всего голосов: 5

Страниц: [1]   Вниз
  Печать  
Автор Тема: скрытые спец.папки (. и ..)  (Прочитано 6905 раз)
ритт
Гость
« : Октябрь 20, 2009, 16:27 »

т.к. я слегка накосячил в этом направлении, ожидается, что в 4.6 папки . и .. *не* будут скрытыми.
в 4.5.х такие папки всегда были скрытыми для никсов и "иногда" для вендов.
и старый, и новый варианты предполагают
1)3)4)    QFileInfo(".hiddendir").isHidden() != QFileInfo(".hiddendir/subdir/..").isHidden()

выполнение утверждения
2)    QFileInfo(".hiddendir").isHidden() == QFileInfo(".hiddendir/subdir/..").isHidden()
делает необходимым некоторую доводку кода, написанного почти шесть лет назад )

вариант 3) вдобавок ещё требует обратного обхода пути и мне лично кажется абсурдным

и, поскольку теперь нужно бы исправлять свой косяк, мне бы хотелось не тупо вернуть как было, а действительно исправить...но не уверен в том, какой вариант в итоге выбрать.
помогите выбрать)
« Последнее редактирование: Октябрь 20, 2009, 16:29 от Константин » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Октябрь 20, 2009, 17:45 »

ящитаю, что
Код:
QFileInfo(".hiddendir").isHidden() != QFileInfo(".hiddendir/subdir/..").isHidden()
- неправильно. В этом случае должен быть expansion, и все пути с . и .. должны быть приведены к реальным путям без этих элементов, ибо это свойство файловой системы
« Последнее редактирование: Октябрь 20, 2009, 17:48 от Alex Custov » Записан
ритт
Гость
« Ответ #2 : Октябрь 20, 2009, 17:56 »

ящитаю, что
Код:
QFileInfo(".hiddendir").isHidden() != QFileInfo(".hiddendir/subdir/..").isHidden()
- неправильно. В этом случае должен быть expansion, и все пути с . и .. должны быть приведены к реальным путям без этих элементов, ибо это свойство файловой системы
ну, так и голосуй тогда за вариант 2 Улыбающийся

я так же считаю, что вариант 2 наиболее верный (хоть и более трудозатратен)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Октябрь 20, 2009, 18:26 »

проголосовал за 2)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Kagami
Гость
« Ответ #4 : Октябрь 20, 2009, 18:30 »

Проголосовал за третий вариант, так как не понял куда отнести случай
".hiddendir/subdir/../.."
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Октябрь 20, 2009, 19:30 »

ну, так и голосуй тогда за вариант 2 Улыбающийся

мне кажется всё таки 1-й вариант. Взять хотя бы самый простой драйвер fs, fat, в ядре, там . и .. обрабатываются специальныи образом. Например:

Код
C
start_filldir:
       lpos = cpos - (nr_slots + 1) * sizeof(struct msdos_dir_entry);
       /* . */
       if (!memcmp(de->name, MSDOS_DOT, MSDOS_NAME))
               inum = inode->i_ino;
       /* .. */
       else if (!memcmp(de->name, MSDOS_DOTDOT, MSDOS_NAME)) {
               inum = parent_ino(filp->f_path.dentry);
       /* обычный файл */
       } else {
 
Записан
ритт
Гость
« Ответ #6 : Октябрь 20, 2009, 20:59 »

ну, так и голосуй тогда за вариант 2 Улыбающийся

мне кажется всё таки 1-й вариант. Взять хотя бы самый простой драйвер fs, fat, в ядре, там . и .. обрабатываются специальныи образом. Например:

Код
C
start_filldir:
       lpos = cpos - (nr_slots + 1) * sizeof(struct msdos_dir_entry);
       /* . */
       if (!memcmp(de->name, MSDOS_DOT, MSDOS_NAME))
               inum = inode->i_ino;
       /* .. */
       else if (!memcmp(de->name, MSDOS_DOTDOT, MSDOS_NAME)) {
               inum = parent_ino(filp->f_path.dentry);
       /* обычный файл */
       } else {
 
и где в коде первый вариант? там как раз второй...
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Октябрь 20, 2009, 21:17 »

и где в коде первый вариант? там как раз второй...

я имею ввиду то, что . и .. - это специальные файлы, пути с ними должны всегда раскрываться в полные пути (by design). С этой точки зрения QFileInfo(".hiddendir/subdir/..") и QFileInfo(".hiddendir") будут использовать один и тот же каталог для внутренних операций - ".hiddendir".

А в опрос сейчас начинаю вдумываться, и вопросов только больше становится Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Октябрь 20, 2009, 21:35 »

Константин, а можно для особо одарённых, подробнее объяснить?

Что значит фраза "должны ли папки со специменами "." и ".." быть скрыты?"
Это когда я у Qt прошу список каталогов, некого заданного каталога и в ответ получаю QStringList содержащий имена каталогов, то будут ли "." и ".." в этом списке? Или о чём-то другом речь?
Записан

Юра.
ритт
Гость
« Ответ #9 : Октябрь 20, 2009, 21:57 »

Константин, а можно для особо одарённых, подробнее объяснить?

Что значит фраза "должны ли папки со специменами "." и ".." быть скрыты?"
Это когда я у Qt прошу список каталогов, некого заданного каталога и в ответ получаю QStringList содержащий имена каталогов, то будут ли "." и ".." в этом списке? Или о чём-то другом речь?

у кутэ ты это просишь посредством QDirIterator (либо через врап в QDir), а там есть соответствующий флаг - NoDotAndDotDot, посредством которого ты можешь явно указать нужны ли тебе эти папки или нет.
но в первом варианте если не выставлен флаг Hidden (т.е. фильтрацию по умолчанию), спец.каталогов в списке не будет, т.к. они в соответствии с документацией *всегда* скрыты, а флаг NoDotAndDotDot не установлен. как по мне, то это мутота какая-то...

но лично для меня это вторично. а первично - пример со сравнением свойств файлинфов с разными путями на входе, указывающими на один и тот же каталог - т.е. всё тот же пресловутый COMPARE(QFileInfo(".hiddendir").isHidden(), QFileInfo(".hiddendir/subdir/..").isHidden())
полагаю, все уже догадались, что .hiddendir и .hiddendir/subdir/.. указывают на один каталог - .hiddendir
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Октябрь 20, 2009, 22:06 »

ага, тогда я бы ожидал, что результат сравнения даст истину (т.е. вариант №2 в твоём первом сообщении), ведь я могу передавать для сравнения не явные пути (жашитые в программе), а полученные во время работы программы.
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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