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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Как создать Hardlink?  (Прочитано 20455 раз)
ритт
Гость
« Ответ #15 : Июль 20, 2009, 23:03 »

в венде, начиная с висты, появилась нативная поддержка симлинков и хардлинков (к сожалению, под 2к придётся пользоваться костылями).
Не совсем понял причем здесь win 2k? Важен тип раздела NTFS.
тип раздела тоже важен, но нативная поддержка куда важнее.

Я понял проблему с симлинками!
И вижу только 2 проблемы с хардлинками:
1) Создавать можно только в пределах раздела
2) Создавать можно только на разделах определенного типа
Ты это имеешь ввиду?
почти такие же ограничения и на симлинки. но это ограничения системы, а я говорил про проблемы реализации в Qt

lit-uriy, основной вопрос исчерпан в предыдущем посте. предлагаю оставить пока что как есть...
Записан
spectre71
Гость
« Ответ #16 : Июль 20, 2009, 23:35 »

тип раздела тоже важен, но нативная поддержка куда важнее.

Из MSDN
Цитировать
CreateHardLink
Requirements
Client Requires Windows Vista, Windows XP, or Windows 2000 Professional.
Server Requires Windows Server "Longhorn", Windows Server 2003, or Windows 2000 Server.
Header Declared in Winbase.h; include Windows.h.
 
Library Use Kernel32.lib.
 
DLL Requires Kernel32.dll. 
Unicode Implemented as CreateHardLinkW (Unicode) and CreateHardLinkA (ANSI).

Записан
ритт
Гость
« Ответ #17 : Июль 21, 2009, 01:41 »

угу, для хардлинков (их указывал как "и" - получилось как будто и хардлинки только начиная с висты).
а отвечал на
вот от символической ссылки на двухтоннике яб не отказался <snip>
Записан
ритт
Гость
« Ответ #18 : Июль 30, 2009, 15:56 »

вот и реализовал поддержку хардлинков, симлинков и алиасов (ну, почти реализовал)...
шурша манами, не встретил упоминаний того, можно ли из хардлинки (POSIX | NTFS) прочитать путь к источнику...как будто бы нет...
но решил обратиться к тем, кто знает наверняка, ибо закралось подозрение, что путь вытащить всё же можно (как минимум у junction'ов можно вытащить REPARSE_DATA и расковырять путь к источнику...)
« Последнее редактирование: Июль 30, 2009, 16:01 от Константин » Записан
BRE
Гость
« Ответ #19 : Июль 30, 2009, 16:09 »

вот и реализовал поддержку хардлинков, симлинков и алиасов (ну, почти реализовал)...
шурша манами, не встретил упоминаний того, можно ли из хардлинки (POSIX | NTFS) прочитать путь к источнику...как будто бы нет...
но решил обратиться к тем, кто знает наверняка, ибо закралось подозрение, что путь вытащить всё же можно...
По моему, для ядра хардлинки на один и тот-же источник данных (inode) ничем не отличаются.
Записан
ритт
Гость
« Ответ #20 : Июль 30, 2009, 16:22 »

верно. но мне не для внутреннего поведения нужно, а юзверю показать что-то на QFileInfo::symLinkTarget()
Записан
BRE
Гость
« Ответ #21 : Июль 30, 2009, 16:30 »

верно. но мне не для внутреннего поведения нужно, а юзверю показать что-то на QFileInfo::symLinkTarget()
Пустую строку.  Непонимающий
« Последнее редактирование: Июль 30, 2009, 16:33 от BRE » Записан
ритт
Гость
« Ответ #22 : Июль 30, 2009, 16:38 »

пустая строка возвращается, если запись - не линк и иногда если таргет линка не существует.
вот я и думаю как мне рулить хардлинки - считать их вообще линками или пусть остаются обычными файлами?
Записан
BRE
Гость
« Ответ #23 : Июль 30, 2009, 16:42 »

пустая строка возвращается, если запись - не линк и иногда если таргет линка не существует.
вот я и думаю как мне рулить хардлинки - считать их вообще линками или пусть остаются обычными файлами?
После создания они и становятся обычными файлами, друг от друга ничем не отличающимися.
Поэтому, пустая строка, с точки зрения документации, будет в самый раз.  Улыбающийся
IMHO.
Записан
BRE
Гость
« Ответ #24 : Июль 30, 2009, 18:03 »

Еще мысли вслух.
Можно проверять количество линков и если их больше 1, считать файл hardlink'ом и выводить в QFileInfo::symLinkTarget() абсолютный путь к файлу.
Записан
spectre71
Гость
« Ответ #25 : Июль 30, 2009, 18:35 »

Еще мысли вслух.
Можно проверять количество линков и если их больше 1, считать файл hardlink'ом и выводить в QFileInfo::symLinkTarget() абсолютный путь к файлу.
Лучше не надо! Поскольку никакого отношения к symLink не имеет.
Однозначно, всегда выводить пустую строку.

Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #26 : Июль 30, 2009, 19:07 »

а по мне дак "или пусть остаются обычными файлами?"
Записан

Юра.
spectre71
Гость
« Ответ #27 : Июль 30, 2009, 19:26 »

а по мне дак "или пусть остаются обычными файлами?"
Так они и есть обычные файлы, вернее один файл!
Можно сказать так: Имя файла это Hard Link на "физический источник" inode
"Физический файл" просто может иметь несколько имен, т.е хардлинков и они все равнозначны!
Записан
ритт
Гость
« Ответ #28 : Июль 30, 2009, 19:55 »

нет, сорц не может быть таргетом.

> thiago: a hardlink has no target
значит, остаются симлинки и алиасы. есть ещё junction'ы, но пока не знаю куда их присобачить. возможно, для < висты будут играть роль кастрированных симлинков (только папки на папки, если правильно помню)...
Записан
ритт
Гость
« Ответ #29 : Июль 30, 2009, 20:03 »

Можно сказать так: Имя файла это Hard Link на "физический источник" inode
"Физический файл" просто может иметь несколько имен, т.е хардлинков и они все равнозначны!
поправка - они неравнозначны. мелкомягкие, как всегда, вые?нулись/сэкономили - в итоге инфа для хардлинков обновляется только при открытии и на получение инфы по хэндлу (ctrl+r в тотале наглядно показывает как работает это убожество).

даже захотелось поставить свисту - чтобы иметь нормальные симлинки...но я знаю, что мне всё-равно будет лень переустанавливать систему Улыбающийся
лучше я чуть позже попрошу кого-нибудь из счастливых обладателей потестить изменения...
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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