如何在 C# 中找到保存给定分区的磁盘?
有谁知道如何以编程方式找出哪个物理磁盘保存给定分区? 我可以手动找到此信息,使用 Start->Run->diskmgmt.msc ,我可以在其中看到(在我的计算机上)分区 C: 和 D: 位于磁盘 1 上,E: 位于磁盘 1 上,E: 位于磁盘 1 上。 F:在磁盘 0 上。
这是为了优化一些文件处理操作,如果文件位于不同的物理磁盘上,则可以并行执行这些操作。
Does anyone know a way to find out programatically which physical disk holds a given partition?
Manually, I can find this info using Start->Run->diskmgmt.msc , where I can see that (on my computer) that partitions C: and D: are on disk 1, E: & F: on disk 0.
This is for optimizing some file crunching operations by doing them in parallel if the files are on different physical disks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以通过查询 Win32_DiskDrive 类。
这里有关 .NET 中 WMI 的基本信息。
You can obtain this information using WMI from System.Management namespace by quering Win32_DiskDrive class.
Here's basic info about WMI in .NET.
除了 Arul 的答案之外,这里还有一个链接,显示如何使用 VBS 脚本中的 WMI 获取磁盘<->分区关联:WMI 任务:磁盘和文件系统
-> 请参阅页面上的最后一个示例。
编辑:更好的是,这是一篇好文章 在使用 C# 的 WMI 上,它恰好也描述了获取持有逻辑磁盘(例如
\\\\.\\PHYSICALDRIVE0
)所需的 WMI 类之间的确切关系<代码>C:)In addition to Arul's answer, here's a link that shows how to geth the disk<->partition association using WMI from a VBS script: WMI Tasks: Disks and File Systems
-> see the last example on the page.
Edit: Even better, here's a good article on WMI using C#, which just happens to also describe the exact relationships between the WMI classes needed to get the disk drive (e.g.
\\\\.\\PHYSICALDRIVE0
) that holds a logical disk (e.g.C:
)参见 HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
参见类:CIM_BasedOn - 非枚举隐藏分区,CIM_DiskPartition -all,但看不到磁盘标签,CIM_StorageExtent - GUID、标签、分区(也隐藏)
see HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
see Class: CIM_BasedOn - non enumerate hiden partition, CIM_DiskPartition -all, but not see disk label, CIM_StorageExtent - GUID, label, partition(hide too)
您确定该分区仅与一个磁盘关联吗? 它可以跨多个物理磁盘进行条带化/跨度化等。
Are you sure the partition is associated with only one disk? It could be striped/spanned/etc across multiple physical disks.