代码之家  ›  专栏  ›  技术社区  ›  PaulB

获取逻辑驱动器列表

  •  37
  • PaulB  · 技术社区  · 15 年前

    如何获取系统上的逻辑驱动器(C)列表及其容量和可用空间?

    6 回复  |  直到 15 年前
        1
  •  56
  •   Richard    15 年前
        2
  •  26
  •   Community Lee Campbell    8 年前
    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
  •  20
  •   Tom Ritter    15 年前

    Directory.GetLogicalDrives

    他们的例子更有力,但关键是

                string[] drives = System.IO.Directory.GetLogicalDrives();
    
                foreach (string str in drives) 
                {
                    System.Console.WriteLine(str);
                }
    

    你也可以 P/Invoke 并调用win32函数(或者在非托管代码中使用它)。

    但是,它只得到驱动器列表 ,有关每个的信息,您将要使用 GetDrives 正如克里斯·巴兰斯所展示的。

        4
  •  5
  •   Ondrej Janacek    11 年前

    也许这就是你想要的:

    listBox1.Items.Clear();
    
    foreach (DriveInfo f in DriveInfo.GetDrives())    
        listBox1.Items.Add(f);
    
        5
  •  1
  •   Eoin Campbell    15 年前

    您可以使用Windows Management Instrumentation(WMI)检索此信息

     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());
        }
    

    这里有关于您可以轮询的属性的更多信息

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

        6
  •  1
  •   SpoiledTechie.com    7 年前

    这是一段美妙的代码。

    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.
    }