如何在Linux中以编程方式获取存储驱动器的信息?(C# MONO)

4
我需要编程方式获取Linux系统中所有可用存储驱动器,包括以下字段:
  • 路径
  • 文件系统(FAT32、NTFS等)
  • 包含的物理磁盘
它需要支持所有常见的存储类型:硬盘、Disk-On-Keys、CdRom、Dvd等。
如何使用C#实现,并能在MONO上正常运行?
1个回答

3
很简单。 读取文件夹/dev/disk/by-path中的内容。 该目录中的文件是/dev下设备文件的符号链接。 然后,您可以使用gudev的mono端口找到有关这些文件的一些常规信息-您可以在此处获取一个。 您还需要glib-sharp才能使用此功能,它是gtk-sharp2包的一部分(使用软件包管理器安装)。 按照以下示例使用:
GLib.GType.Init();
gudev.GUdevClient a=new gudev.GUdevClient(null);            
gudev.GUdevDevice dev=a.QueryByDeviceFile("/dev/disk/by-path/--some-file--");
Console.WriteLine (dev.GetProperty("ID_FS_TYPE")); //will output the file system, eg. ntfs
Console.WrtieLine(dev.GetProperty("ID_FS_LABEL")); //will output the label of the disk

要获取挂载点,您需要找到实际的设备文件。 引用“Mono.Posix”包,并使用Mono.Unix.UnixSymbolicLinkInfo类查找该文件。 例如:

Mono.Unix.UnixSymbolicLinkInfo sym=new Mono.Unix.UnixSymbolicLinkInfo("/dev/disk/by-path/--some-file--");
Console.WriteLine(sym.ContentsPath); //Will output something like ../../sda1

将../..替换为/dev,然后读取文件/etc/mtab。文件的格式大致如下:

/dev/file mountpoint stuff-you-don't-care-about
每个设备占一行,所以按 /n 分割,然后按空格分割。之后的内容很简单,我认为不需要继续解释。

只是一句话:“ID_FS_LABEL”(以及相关的“ID_FS_LABEL_ENC”)仅在磁盘创建时定义时才存在。我有一堆没有磁盘标签的旧DVD - 可能当时的软件没有要求...不要责怪“gudev” ;) - jcoppens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接