【问题标题】:Listing all disk partitions in C# [duplicate]在C#中列出所有磁盘分区[重复]
【发布时间】:2013-06-18 18:27:09
【问题描述】:

我一直在编写列出磁盘所有分区的代码,但我发现了一个问题。 WMI 的Win32_DiskDrive 属性Partitions 显示一个测试磁盘有5 个分区,但我只能列出其中的四个(最后两个分区显示为只有一个)。最后两个分区是主分区,但一个是 SWAP 分区,另一个是 Linux 分区。

【问题讨论】:

  • 我们可以看看你试过的代码吗?
  • @KenWhite,只有当 OP 真的想使用 WMI 方法而不是 Tim 的答案时,我才会同意。
  • 我试过这段代码codevar searcher = new ManagementObjectSearcher("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("DeviceID:{0}", (string)queryObj["DeviceID"]);
    }`跨度>
  • @gunr2171:该问题询问有关在 C# 中列出所有磁盘分区的问题,这也是我链接的问题所问的问题。他们都没有说“没有 WMI”,这个问题确实提到了使用 WMI。这个问题也没有说“使用蒂姆的答案”。 :-)

标签: c# wmi


【解决方案1】:

我认为这应该可以解决问题:

    /// <summary>
    /// Loads all Drives of the Computer and returns a List.
    /// </summary>
    private List<DriveInfo> LoadDrives()
    {
        var drives = new List<DriveInfo>();
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            if (drive.IsReady)
            {
                drives.Add(drive);
            }
        }
        return drives;
    }

【讨论】:

  • 如果你真的想要,你可以用yield return替换你的drives.Add并返回一个IEnumerable。就像建议一样。
  • 我试过了,但是这段代码只返回3个驱动器,windows磁盘管理显示5...
  • 是的,这是真的,也许更优雅:)
  • 我认为原因可能是有条件的!您可以调试该函数,看看为什么只返回三个驱动器!
  • DriveInfo.GetDrives() 仅返回 Windows 在“我的电脑”窗口中显示的相同驱动器
【解决方案2】:

我相信你想要的是string[] System.IO.Directory.GetLogicalDrives()

对于您使用GetLogicalDrives 获得的每个string,您可以创建一个System.IO.DriveInfo 对象,该对象将提供有关逻辑驱动器的各种信息。

DriveInfo.GetDrives() 可能是上述两个步骤的捷径。不过我并不完全确定,文档也不是很清楚。

【讨论】:

  • 我会试试string[] System.IO.Directory.GetLogicalDrives(),我会告诉我我的经验
  • 此代码返回相同的,只有 3 个驱动器,与 Windows 在“我的电脑”窗口中显示的驱动器相同...
猜你喜欢
  • 2015-01-05
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多