Russian Qt Forum

Qt => Общие вопросы => Тема начата: ритт от Октябрь 20, 2009, 16:27



Название: скрытые спец.папки (. и ..)
Отправлено: ритт от Октябрь 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) вдобавок ещё требует обратного обхода пути и мне лично кажется абсурдным

и, поскольку теперь нужно бы исправлять свой косяк, мне бы хотелось не тупо вернуть как было, а действительно исправить...но не уверен в том, какой вариант в итоге выбрать.
помогите выбрать)


Название: Re: скрытые спец.папки (. и ..)
Отправлено: Alex Custov от Октябрь 20, 2009, 17:45
ящитаю, что
Код:
QFileInfo(".hiddendir").isHidden() != QFileInfo(".hiddendir/subdir/..").isHidden()
- неправильно. В этом случае должен быть expansion, и все пути с . и .. должны быть приведены к реальным путям без этих элементов, ибо это свойство файловой системы


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

я так же считаю, что вариант 2 наиболее верный (хоть и более трудозатратен)


Название: Re: скрытые спец.папки (. и ..)
Отправлено: pastor от Октябрь 20, 2009, 18:26
проголосовал за 2)


Название: Re: скрытые спец.папки (. и ..)
Отправлено: Kagami от Октябрь 20, 2009, 18:30
Проголосовал за третий вариант, так как не понял куда отнести случай
".hiddendir/subdir/../.."


Название: Re: скрытые спец.папки (. и ..)
Отправлено: Alex Custov от Октябрь 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 {
 


Название: Re: скрытые спец.папки (. и ..)
Отправлено: ритт от Октябрь 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 {
 
и где в коде первый вариант? там как раз второй...


Название: Re: скрытые спец.папки (. и ..)
Отправлено: Alex Custov от Октябрь 20, 2009, 21:17
и где в коде первый вариант? там как раз второй...

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

А в опрос сейчас начинаю вдумываться, и вопросов только больше становится :)


Название: Re: скрытые спец.папки (. и ..)
Отправлено: lit-uriy от Октябрь 20, 2009, 21:35
Константин, а можно для особо одарённых, подробнее объяснить?

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


Название: Re: скрытые спец.папки (. и ..)
Отправлено: ритт от Октябрь 20, 2009, 21:57
Константин, а можно для особо одарённых, подробнее объяснить?

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

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

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


Название: Re: скрытые спец.папки (. и ..)
Отправлено: lit-uriy от Октябрь 20, 2009, 22:06
ага, тогда я бы ожидал, что результат сравнения даст истину (т.е. вариант №2 в твоём первом сообщении), ведь я могу передавать для сравнения не явные пути (жашитые в программе), а полученные во время работы программы.