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

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

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

【问题讨论】:

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

标签: c# filesystems disk


【解决方案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】:

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

        【讨论】:

        • 是的,我知道这种可能性。我一步一步来:)
        猜你喜欢
        • 2015-11-20
        • 2015-07-21
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多