Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Как средствами QT скрыть файл?

Автор: Rocky 19.11.2009, 23:24

или целую папку...
Кто-нибудь пробовал это делать? Я так и не понял, позволяет ли QT это делать...

Автор: panter_dsd 20.11.2009, 7:17

А при чем тут Qt? Только API конкретной системы.

Автор: Litkevich Yuriy 20.11.2009, 10:37

Rocky, в Линухе, например, вообще нет такого атрибута у файла/каталога

Автор: Elfinit 20.11.2009, 11:13

А QFileInfo::isHidden в линуксе что говорит? Всегда false?

Автор: BRE 20.11.2009, 11:22

Цитата(Litkevich Yuriy @ 20.11.2009, 10:37) *
Rocky, в Линухе, например, вообще нет такого атрибута у файла/каталога

У linux есть скрытые файлы у которых точка в начале имени.

Цитата
А QFileInfo::isHidden в линуксе что говорит? Всегда false?

Для таких файлов true.

Автор: Litkevich Yuriy 20.11.2009, 11:30

Цитата(BRE @ 20.11.2009, 14:22) *
У linux есть скрытые файлы у которых точка в начале имени.
это особенность поведения файлового менеджера. Дело в том, что нельзя просто поставить точку в переди или убрать её, имя файла при этом меняется.
если где-то обращение содержало путь:
/foo/.bar/myfile
то убрав точку перед bar, мы уже не можем обращаться по старому пути - его больше нет.

В виндовозе мы можем менять этот атрибут (скрытости) не влияя на путь

Автор: ViGOur 20.11.2009, 11:53

Как уже было сказано, это нужно использовать API целевой системы.
Под виндовсом есть такие штуки как хуки - перехват вызова функций, даже если это функции вызываются не в твоем процессе и не тобой. В твоем случае нужно просто ловить вызов функций получения файлов или папок и если в перечислении попадается файл или папка, которые ты хочешь скрыть, пропускать их и отдавать следующий за ним файл или папку.

Под линуксом пока не знаю ничего о подобном...

Автор: Rocky 20.11.2009, 21:42

Гы... все буквы куда-то разлетелись... :)

Просто я хотел сделать скрытой папку с логами.. чтобы пользователь не мог ее взять и удалить. В линухах все решается проще: установкой владельца директория. А вот в винде боюсь так не сделать... Поэтому решил скрыть. Вобщем, только winAPI юзать.. ясно..

Цитата
ловить вызов функций получения файлов или папок и если в перечислении попадается файл или папка, которые ты хочешь скрыть, пропускать их и отдавать следующий за ним файл или папку

не, все проще, есть папка logs внутри которой генерится куча html файлов с логами. С хуками кстати вариант..давно не занимался ничем таким.. Интересно, если происходит удаление файла через командную строку, прога, ставящая хук на удаление тоже выявит это? Тогда надо будет сделать чтобы сам резидент был неубиваем... :)

оффтоп
В линухах имя файла меняется.. это да... но есть такая вещь как хард-линки... Если память не изменяет ;)

Автор: Elfinit 20.11.2009, 22:39

Цитата(Rocky @ 20.11.2009, 21:42) *
Просто я хотел сделать скрытой папку с логами.. чтобы пользователь не мог ее взять и удалить.

Так кинь её по адресу getenv("APPDATA") + "/" + appname или getenv("TEMP") + "/" + appname или getenv("TMPDIR") "/" + appname (в линухе я кидаю в getenv("HOME") + "/" + appname). Вряд ли пользователь будет там регулярно сидеть и скурпулёзно удалять)

Автор: Rocky 20.11.2009, 23:05

Кстати неплохая идея )) Чет мне в голову не пришло это )))

Автор: Elfinit 21.11.2009, 20:01

Всегда пожалуйста)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)