列出磁盘上的所有分区

4

我正在使用C#为一个在Windows系统下不被支持的文件系统编写一个实用程序,这意味着我不能直接访问该驱动器。我需要一种方法来列出硬盘上的所有分区并对它们进行写入/格式化。


2
无法访问驱动器,除了拍照外,你几乎没有其他选择。 - Hans Passant
1
@HansPassant 我认为他的意思是“C:驱动器”和“D:驱动器”,而不是“硬盘驱动器”。 - robertc
@CommunistPancake 请提出问题,改进并粘贴一些代码。 - kenorb
2个回答

8

您可以使用WMI列出磁盘分区。

var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskPartition");

foreach (var queryObj in searcher.Get())
{
    Console.WriteLine("-----------------------------------");
    Console.WriteLine("Win32_DiskPartition instance");
    Console.WriteLine("Name:{0}", (string)queryObj["Name"]);
    Console.WriteLine("Index:{0}", (uint)queryObj["Index"]);
    Console.WriteLine("DiskIndex:{0}", (uint)queryObj["DiskIndex"]);
    Console.WriteLine("BootPartition:{0}", (bool)queryObj["BootPartition"]);
}

3
你好,我该如何从这个类中获取分区标题(C、D、E等)? - user3290286
我发现这个很有用:https://gist.github.com/MiloszKrajewski/352dc8b8eb132d3a2bc7 你需要取消注释write()以获取完整信息。 - dlchambers

1
您可以使用以下方法来获取磁盘分区所挂载的卷或驱动器号:
  1. Win32_LogicalDiskToPartition
  2. Win32_DiskDrive
Win32_DiskDrive 类中,您可以通过查询属性 Index 或从 Name 属性中提取 DriveNumber 来获取 DriveNumber。然后从 Win32_LogicalDiskToPartition 查询 AntecedentDependent。在 Antecedent 值中,您将得到磁盘编号和它正在尝试映射卷的分区,之后从 Dependent 属性中提取诸如 "C:"、"D:" 等的 DriveLetter。因此,通过使用这个逻辑,您可以获取特定 HardDisk 上挂载的 LogicalDrives
我在我的组件中使用这个逻辑来获取我系统上特定硬盘的 LogicalDrive 名称("C:"、"D:"等)。

一些示例代码会很好。 - dlchambers

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