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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Как создать Hardlink?  (Прочитано 20928 раз)
spectre71
Гость
« : Июль 18, 2009, 09:16 »

Имеются ли в QT возможности создавать Hardlink?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июль 18, 2009, 11:02 »

Такой возможности не видел. Юзай QProcess + ln (Linux) или fsutil (Windows, NTFS)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spectre71
Гость
« Ответ #2 : Июль 20, 2009, 10:40 »

Такой возможности не видел. Юзай QProcess + ln (Linux) или fsutil (Windows, NTFS)
Плохо. Прийдется делать свою системнозависимую реализацию.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июль 20, 2009, 11:00 »

извиняюсь за тупой вопрос - разве в винде есть хардлинки?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Июль 20, 2009, 11:22 »

Есть на ntfs.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Июль 20, 2009, 18:37 »

а у меня двухтонник говорит, что не знает ни каких "fsutil"
Записан

Юра.
ритт
Гость
« Ответ #6 : Июль 20, 2009, 19:17 »

а насколько данный функционал вобще востребован?
я имею в виду поддержку симлинков под нтфс и хардлинков под никсы/свисту...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июль 20, 2009, 20:11 »

вот от символической ссылки на двухтоннике яб не отказался, ведь ярлыки - всего лишь этикетки. к ним нельзя обращаться как файлам/каталогам.
Записан

Юра.
spectre71
Гость
« Ответ #8 : Июль 20, 2009, 20:44 »

а насколько данный функционал вобще востребован?
я имею в виду поддержку симлинков под нтфс и хардлинков под никсы/свисту...
Симлинки меня не интересуют. Под NTFS можно создавать хардлинки. О симлинках я не говорил, для моей задачи они не годятся.
Если упрощенно, то задача такая:
1) Есть packages
2) package - набор файлов типичный объем 1GB (на самом деле есть еще некоторая метаинформация)
3) package инсталлируется - файлы распаковываются в определенную директорию(для каждого package в свою)
4) package может быть как независимый, так и update или add-on к уже существующему
5) Есть объекты ссылающиеся на данные именно конкретного package, а в случае если он update или add-on то на недостающие в нем данные родительских packages, но не на сами родительские packages!
6) Любой package, в том числе и родительский можно деинсталлировать(удалить), но это не должно привести к потерям данных для тех объектов которые ссылаются на дочерние packages
7) Необходимо избежать дублирование данных для дочерних packages(поскольку объемы достаточно большие).
8.) Упростить деинсталляцию package.
9) В процессе инсталляции package упростить обработку ошибок и откат.
Записан
ритт
Гость
« Ответ #9 : Июль 20, 2009, 21:04 »

вот от символической ссылки на двухтоннике яб не отказался, ведь ярлыки - всего лишь этикетки. к ним нельзя обращаться как файлам/каталогам.

собсна, почему я спрашиваю?
в венде, начиная с висты, появилась нативная поддержка симлинков и хардлинков (к сожалению, под 2к придётся пользоваться костылями). поддержку симлинков я уже реализовал в QFSFileengine, НО создал этим новую проблему - как теперь под вендой контейнеры должны себя вести для путей, содержащих "ненастоящие" линки (ака алиасы)?
чуть подробнее: допустим, имеются логические диски D: и E:, D:/E.lnk - алиас, ссылающийся на E:/ и D:/E - симлинка, ссылающаяся на E:/ :
Цитировать
QFileInfo("D:/E.lnk").isSymLink()              true
QFileInfo("D:/E").isSymLink()                   true

QFileInfo("D:/E.lnk").exists()                   true
QFileInfo("D:/E").exists()                       true

QFileInfo("D:/E.lnk/folder").exists()          false
QFileInfo("D:/E/folder").exists()               true
получаем разное поведение, т.к. для нормальной работы алиасы необходимо резолвить отдельно. если пойти по существующему пути и резолвить алиасы "прозрачно" в файлэнджине, получаем оверхед, от которого невозможно избавиться без изменения поведения (как сейчас для *.lnk, ссылающихся на недоступные ресурсы). альтернатива - QAbstractFileEngineV2. для поддержки хардлинков вариант только один - QAbstractFileEngineV2.
но QAbstractFileEngineV2 - работа далеко на на пару вечеров...

по этим причинам идею я пока забросил, но могу возобновить работу, если данный функционал востребован не только мной.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Июль 20, 2009, 21:13 »

Константин, Предлагаю тему разделить, чтобы не мешатся основному вопросу.
Записан

Юра.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Июль 20, 2009, 21:16 »

а у меня двухтонник говорит, что не знает ни каких "fsutil"

У меня на Windows XP x64 такая тулза есть:


Цитировать
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:\Documents and Settings\pastor>fsutil
---- Commands Supported ----

behavior        Control file system behavior
dirty           Manage volume dirty bit
file            File specific commands
fsinfo          File system information
hardlink        Hardlink management
objectid        Object ID management
quota           Quota management
reparsepoint    Reparse point management
sparse          Sparse file control
usn             USN management
volume          Volume management
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spectre71
Гость
« Ответ #12 : Июль 20, 2009, 21:17 »

в венде, начиная с висты, появилась нативная поддержка симлинков и хардлинков (к сожалению, под 2к придётся пользоваться костылями).
Не совсем понял причем здесь win 2k? Важен тип раздела NTFS.
Я понял проблему с симлинками!
И вижу только 2 проблемы с хардлинками:
1) Создавать можно только в пределах раздела
2) Создавать можно только на разделах определенного типа
Ты это имеешь ввиду?
Записан
spectre71
Гость
« Ответ #13 : Июль 20, 2009, 21:23 »

Для винды нашел в MSDN:
Цитировать
CreateHardLink
The CreateHardLink function establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system.
BOOL CreateHardLink(
  LPCTSTR lpFileName,
  LPCTSTR lpExistingFileName,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

Под Linux вроде должно быть что-то типа функции "link"?
Записан
ритт
Гость
« Ответ #14 : Июль 20, 2009, 23:00 »

Для винды нашел в MSDN:
Цитировать
CreateHardLink
The CreateHardLink function establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system.
BOOL CreateHardLink(
  LPCTSTR lpFileName,
  LPCTSTR lpExistingFileName,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

Под Linux вроде должно быть что-то типа функции "link"?
да.

http://msdn.microsoft.com/en-us/library/aa363860(VS.85).aspx
http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=link&category=2
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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