如何在 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# 中找到包含给定分区的磁盘?的主要内容,如果未能解决你的问题,请参考以下文章