2013-06-18 17 views
1

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

+0

我们可以看到代码,你试过? – gunr2171

+0

@KenWhite,我只会同意,如果OP实际上想要使用WMI的方法,而不是蒂姆的答案。 – gunr2171

+0

我试过这个代码 'code'var搜索=新ManagementObjectSearcher( “SELECT * FROM Win32_DiskPartition);
的foreach(在searcher.Get()VAR queryObj)
{
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”]);
}' –

回答

1

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

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

DriveInfo.GetDrives()可能是上述两个步骤的捷径。尽管如此,我还不完全确定,而且文件不是很清楚。

+0

我会尝试使用'string [] System.IO.Directory.GetLogicalDrives()',我会告诉我的经验 –

+0

此代码返回相同的,只有3个驱动器,与Windows在我的电脑中显示的驱动器相同窗口... –

2

我想这应该做的伎俩:

/// <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; 
    } 
+0

如果你真的想,你可以用'yield return'替换'drives.Add'并返回一个'IEnumerable'。就像建议一样。 – gunr2171

+0

我试过了,但是这个代码只返回3个驱动器,并且Windows磁盘管理显示5 ... –

+0

是的,这是真的,也许更优雅:) –