如何在 C# 中找到包含给定分区的磁盘?

Posted

技术标签:

【中文标题】如何在 C# 中找到包含给定分区的磁盘?【英文标题】:How to find the disk that holds a given partition in C#? 【发布时间】:2010-09-22 22:34:22 【问题描述】:

有谁知道以编程方式找出哪个物理磁盘拥有给定分区的方法? 手动,我可以使用 Start->Run->diskmgmt.msc 找到此信息,在那里我可以看到(在我的计算机上)分区 C: 和 D: 在磁盘 1 上,E: & F: 在磁盘 0 上。

这是为了优化一些文件处理操作,如果文件位于不同的物理磁盘上,则通过并行执行这些操作。

【问题讨论】:

听起来你的意思是“逻辑磁盘”或“卷”而不是“分区”。请记住,一个分区可以是空的(上面没有卷),并且在跨多个磁盘进行跨越/条带化时,一个卷可以驻留在多个分区上。 【参考方案1】:

您可以使用 WMI 从 System.Management 命名空间通过查询 Win32_DiskDrive 类来获取此信息。

Here's.NET 中有关 WMI 的基本信息。

【讨论】:

【参考方案2】:

除了 Arul 的回答之外,这里还有一个链接,显示了如何使用 VBS 脚本中的 WMI 获取磁盘分区关联:WMI Tasks: Disks and File Systems -> 查看页面上的最后一个示例。

编辑:更好的是,here's a good article 在 WMI 上使用 C#,它恰好也描述了获取包含逻辑磁盘的磁盘驱动器(例如 \\\\.\\PHYSICALDRIVE0)所需的 WMI 类之间的确切关系(例如 @987654324 @)

【讨论】:

【参考方案3】:

查看 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices

wmic path CIM_BasedOn get * > wmic-path-CIM_BasedOn-get.txt
wmic path CIM_DiskPartition get * > wmic-path-CIM_DiskPartition-get.txt
wmic path CIM_StorageExtent get * > wmic-path-CIM_StorageExtent-get.txt

查看类:CIM_BasedOn - 非枚举隐藏分区、CIM_DiskPartition -all,但看不到磁盘标签、CIM_StorageExtent - GUID、标签、分区(也隐藏)

【讨论】:

【参考方案4】:

您确定分区只与一个磁盘相关联吗?它可以跨多个物理磁盘进行条带化/跨接/等。

【讨论】:

是的,我知道这种可能性。我一步一步来:)

以上是关于如何在 C# 中找到包含给定分区的磁盘?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MacOS (sierra-catalina) 上为分区获取可用空间

如何在macOS上将磁盘分为多个(非Apple)磁盘分区

Linux 磁盘分区详解

如何获取给定磁盘 ID 的磁盘名称?

debian11怎么删除原来的分区

如何在Linux操作系统中新建磁盘分区