2009-04-23 9 views

答えて

50
+0

最新の.NETバージョンで追加された新しい機能ですか。私はこの数年前に表示する小さなアプリを書いていましたが、その時点でWMIルートに行かなければなりませんでした。とにかく知っておくと便利です...歓声 –

+0

パーフェクト...ありがとうございました – PaulB

+0

MSDNのクイックルック:.NET 2.0で追加されました。 – Richard

0

あなたがポーリングすることができ、ここで属性についてのWMI(Windows Management Instrumentation)

using System.Management; 

    ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
    // Loop through each object (disk) retrieved by WMI 
    foreach (ManagementObject moDisk in mosDisks.Get()) 
    { 
     // Add the HDD to the list (use the Model field as the item's caption) 
     Console.WriteLine(moDisk["Model"].ToString()); 
    } 

Theresの詳細は、この情報を取得することができ

http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html

+0

これは私のコンピュータでは動作しません。 System.Managementには、今すぐManagementObjectSearcherクラスがありません。 URLは有効なWebページも指していません。 –

+0

そのために参照を追加する必要があります。 Visual Studioで、プロジェクトを右クリックし、[追加] - > [参照]を選択します。次に、 "System.Management"を検索して追加します。 – Gippeumi

18

Directory.GetLogicalDrives

彼らの例では、より堅牢持っていますが、ここではそれ

  string[] drives = System.IO.Directory.GetLogicalDrives(); 

      foreach (string str in drives) 
      { 
       System.Console.WriteLine(str); 
      } 

あなたはまたP/InvokeとWin32関数を呼び出す(あるいはあなたがアンマネージコードにいる場合はそれを使用する)可能性の核心です。

ドライブリストはだけど、それぞれについての情報はGetDrivesを使ってみましょう(Chris Ballanceのデモンストレーション)。

24
foreach (var drive in DriveInfo.GetDrives()) 
{ 
    double freeSpace = drive.TotalFreeSpace; 
    double totalSpace = drive.TotalSize; 
    double percentFree = (freeSpace/totalSpace) * 100; 
    float num = (float)percentFree; 

    Console.WriteLine("Drive:{0} With {1} % free", drive.Name, num); 
    Console.WriteLine("Space Remaining:{0}", drive.AvailableFreeSpace); 
    Console.WriteLine("Percent Free Space:{0}", percentFree); 
    Console.WriteLine("Space used:{0}", drive.TotalSize); 
    Console.WriteLine("Type: {0}", drive.DriveType); 
} 
3

多分これはあなたが望むものである:

listBox1.Items.Clear(); 

foreach (DriveInfo f in DriveInfo.GetDrives())  
    listBox1.Items.Add(f); 
+0

また、IsReadyプロパティをチェックすることもできます –

0

これは、コードの素晴らしい作品です。

ObjectQuery query = 
    new ObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3"); // Create query to select all the hdd's 

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher(scope, query); // run the query 

ManagementObjectCollection queryCollection = searcher.Get(); // get the results 
string sVolumeLabel = ""; 
string[,] saReturn = new string[queryCollection.Count, 7]; 
int i = 0; // counter for foreach 

foreach (ManagementObject m in queryCollection) 
{ 
    if (string.IsNullOrEmpty(Convert.ToString(m["VolumeName"]))) { sVolumeLabel = "Local Disk"; } else { sVolumeLabel = Convert.ToString(m["VolumeName"]); } // Disk Label 
    string sSystemName = Convert.ToString(m["SystemName"]); // Name of computer 
    string sDriveLetter = Convert.ToString(m["Name"]); // Drive Letter 

    decimal dSize = Math.Round((Convert.ToDecimal(m["Size"])/1073741824), 2); //HDD Size in Gb 
    decimal dFree = Math.Round((Convert.ToDecimal(m["FreeSpace"])/1073741824), 2); // Free Space in Gb 
    decimal dUsed = dSize - dFree; // Used HDD Space in Gb 

    int iPercent = Convert.ToInt32((dFree/dSize) * 100); // Percentage of free space 

    saReturn[i,0] = sSystemName; 
    saReturn[i,1] = sDriveLetter; 
    saReturn[i,2] = sVolumeLabel; 
    saReturn[i,3] = Convert.ToString(dSize); 
    saReturn[i,4] = Convert.ToString(dUsed); 
    saReturn[i,5] = Convert.ToString(dFree); 
    saReturn[i,6] = Convert.ToString(iPercent); 

    i++; // increase counter. This will add the above details for the next drive. 
} 
関連する問題