2013-06-18 40 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

是的,這是真的,也許更優雅:) –