Необходимо написать простейший проводник или файловый менеджер, который будет работать с НМЖД и внешним USB накопителем. Должны быть функции копирования, вставки и удаления. В плане GUI на винформах это возможно реализовать при помощи mono и не является проблемой. На данном этапе столкнулся с не пониманием. При работе в ОС Windows проблем нет, так как я могу свободно использовать WMI и получать доступ к ресурсам и тем же событиям при подключении отключении внешнего накопителя. А вот как быть в ОС Линукс используя mono? Вот пример который я сделал для Windows, здесь реализован пока только просмотр:
Вот так я читаю диски:
//Get Drive list
ManagementObjectCollection queryCollection = getDrives();
foreach ( ManagementObject mo in queryCollection)
{
...
}
В качестве события использован:
System.Windows.Forms.TreeViewEventArgs
Для отображения накопителей и при изменении их количества. Посоветуйте пожалуйста, в какую сторону копать?
DBUS
Если в системе присутствует Udisks
, то хорошим вариантом будет отслеживание подключения дисков по dbus
.
http://storaged.org/doc/udisks2-api/latest/ch02.html
Не нахожу сигнала на добавление диска, но есть сигнал об изменении конфигурации - можно перечитать.
Отследить подключение дисков можно в gvfs
также по dbus
. Есть методы получить список и можно подписаться на сигналы подключения-отключения.
gdbus introspect --session --dest org.gtk.vfs.Daemon --object-path /org/gtk/vfs/mounttracker --recurse
....
interface org.gtk.vfs.MountTracker {
methods:
LookupMount(in (aya{sv}) mount_spec,
out (sossssssbay(aya{sv})ay) mount);
LookupMountByFusePath(in ay fuse_path,
out (sossssssbay(aya{sv})ay) mount);
MountLocation(in (aya{sv}) mount_spec,
in (so) mount_source);
ListMounts(out a(sossssssbay(aya{sv})ay) mounts);
ListMounts2(in b user_visible_only,
out a(sossssssbay(aya{sv})ay) mounts);
RegisterMount(in o obj_path,
in s display_name,
in s stable_name,
in s x_content_types,
in s icon,
in s symbolic_icon,
in s prefered_filename_encoding,
in b user_visible,
in (aya{sv}) mount_spec,
in ay default_location);
UnregisterMount(in o obj_path);
ListMountTypes(out as mount_types);
ListMountableInfo(out a(ssasib) mountables);
RegisterFuse();
signals:
Mounted((sossssssbay(aya{sv})ay) mount);
Unmounted((sossssssbay(aya{sv})ay) mount);
properties:
};
};
Файлы
Самый "железный" и простой метод это смотреть содержимое файла /proc/mounts/
и папки /dev/disks/by-id/
UDEV
Запустить udevadm monitor
и ловить события или сишные вызовы.
DMESG
Смотреть лог dmesg
на события ядра.
Виртуальный выделенный сервер (VDS) становится отличным выбором
При попытки подключения к MySQL из PHP Yii2, да и просто из PHP методом PDO Происходит ошибка: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client