Как запросить содержащий раздел файла с помощью KDE / Qt4?

Я использую KDE, и у меня возникла идея взломать код для Dolphin File Manager (и, возможно, Konqueror, если необходимо), чтобы получить контекстно-зависимое поведение перетаскивания (т.е. файлы перемещаются в одном разделе или копируются) если они перемещены между разделами или источник доступен только для чтения).

Для этого, я думаю, мне нужно найти раздел, содержащий исходный и целевой (достаточно просто в Windows, используя букву диска, но в Linux, поскольку точки монтирования могут быть почти где угодно, это не может быть надежно получено из пути к файлу) и сравните их. Кто-нибудь знает, как я могу узнать раздел, содержащий данный файл?

Это должно быть возможно - я знаю, что Nautilus обеспечивает такое поведение, но я недостаточно знаком с GTK, чтобы отследить соответствующий раздел в исходном коде, чтобы увидеть, как это делается ...


person M_M    schedule 11.03.2012    source источник


Ответы (2)


Qt не предоставляет для этого API. Для POSIX см. stat.

person Frank Osterfeld    schedule 11.03.2012
comment
Полезный ответ :-) Не думаете, что вы знаете, реализует ли это KDE? Не то чтобы я сам не мог найти этот ответ ... - person M_M; 12.03.2012
comment
Если функция KDE не предоставляет больше функций, которые вам нужны, почему бы не использовать стандартную функцию POSIX? - person Chris Browet; 12.03.2012
comment
@Koying: Я не уверен в использовании собственных функций POSIX в коде KDE, поскольку KDE портирован на другие операционные системы, и я полагаю, что было бы проще повторно реализовать функции KDE в другой ОС, чем пытаться использовать функцию, недоступную в этой ОС. ОПЕРАЦИОННЫЕ СИСТЕМЫ. Но эти вещи, как всегда, сложные, и я не уверен на 100% в этом. Придется спросить у разработчиков KDE. - person M_M; 18.03.2012
comment
Koying: kdelibs портированы на Windows, как и многие приложения KDE. - person Frank Osterfeld; 18.03.2012

Для KDE вы можете использовать KIO::stat(). чтобы получить в основном ту же информацию, что и функция stat POSIX, но асинхронно.
Идентификатор устройства должен быть в поле UDS_DEVICE_ID результата.

person alexisdm    schedule 11.03.2012
comment
Я не думаю, что вы знаете, рекомендуется ли использовать это вместо встроенного POSIX stat (), скажем, из соображений переносимости? (Я знаю, что есть порт KDE для Windows) - person M_M; 18.03.2012
comment
По причинам переносимости вам следует держаться подальше от kdelibs, если он вам нужен только для этой единственной функции. - person alexisdm; 18.03.2012
comment
Даже если программы, которые я модифицирую, входят в состав KDE? - person M_M; 18.03.2012
comment
Я забыл, что вы говорили о Dolphin ... Поскольку Dolphin может отображать файлы, которые не находятся в локальных файловых системах (ftp, ssh, samba ...), вам, возможно, придется использовать KIO::stat (если он работает и для этого файла). - person alexisdm; 19.03.2012