c# - 如何以编程方式获取有关 Linux 中存储驱动器的信息? (C#单声道)

标签 c# .net linux mono storage

我需要通过以下字段以编程方式获取 linux 系统中可用的所有存储驱动器:

  • 路径
  • 文件系统(FAT32、NTFS 等)
  • 包含物理磁盘

它需要支持所有常见的存储类型:硬盘、Disk-On-Keys、CdRom、Dvd 等。

如何从 C# 执行此操作以从 MONO 良好运行?

最佳答案

其实很简单。 读取文件夹/dev/disk/by-path 的内容。 此目录中的文件是指向/dev 中设备文件的符号链接(symbolic link)。 然后你可以找到一些关于这些的一般信息,使用 gudev 的单端口 - 你可以获得一个 here . 你还需要 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 分割并按空格分割。之后的一切都很简单,我认为我不需要继续。

关于c# - 如何以编程方式获取有关 Linux 中存储驱动器的信息? (C#单声道),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2482992/

相关文章:

linux - 通过 Unix 域套接字发送结构

c - 如何确定哪个进程正在使用队列?

linux - 在linux shell上按文件名长度复制文件

c# - 解析除最后一个单词之外的所有单词的正则表达式是什么?

c# - C# 中与 Windows Phone 的 Web 服务和服务器客户端连接

c# - 我如何说服 Linq to Sql 生成 Sql 来比较大于或小于的字符串?

c# - Debugger.Launch 不工作

.net - Nancy 使用 Razor : Views are cached, 使开发变得非常困难

c# - 如何在 RSA 实例的实例化中使用 Json Web key

iphone - iPad 中 .NET Web 服务 XML 的动态控制显示