2010-12-14 89 views

回答

2

阿德曼的答案竖起大拇指。完善。 要添加一个微小的修改,我想添加修改它,你可以找到驱动器的类型。它应该迎合你的问题。

DriveInfo[] mydrives = DriveInfo.GetDrives(); 

     foreach (DriveInfo mydrive in mydrives) 
     { 
      if (mydrive.DriveType == DriveType.Removable) 
      { 
       Console.WriteLine("\nRemovable disk"); 
       Console.WriteLine("Drive: {0}", mydrive.Name); 
       Console.WriteLine("Type: {0}", mydrive.DriveType);      
      } 
      else 
      { 
       Console.WriteLine("\nNon Removable disk\n"); 
       Console.WriteLine("Drive: {0}", mydrive.Name); 
       Console.WriteLine("Type: {0}", mydrive.DriveType);     
      } 
     } 

或者,如果你想获得驱动器名称,你也可以这样做。请注意,这些是来自网络的例子,以便特定作者应该获得信用。我所做的是使用这些代码片段创建一个完整的程序,以便您能够理解。

[DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    static extern bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize,out uint SerialNumber, out uint SerialNumberLength, out uint flags,StringBuilder fs, uint fs_size); 

首先按照原样写入该功能。它使用kernel32.dll来检索驱动器信息。 然后在主函数中,你可以简单地添加这些代码(如果它是一个控制台应用程序,或者如果你有一个GUI做适当的。)

uint serialNum, serialNumLength, flags; 
     StringBuilder volumename = new StringBuilder(256); 
     StringBuilder fstype = new StringBuilder(256); 
     bool ok = false; 
     //Cursor.Current = Cursors.WaitCursor; 
     foreach (string drives in Environment.GetLogicalDrives()) 
     { 
      ok = GetVolumeInformation(drives, volumename, (uint)volumename.Capacity - 1, out serialNum, 
            out serialNumLength, out flags, fstype, (uint)fstype.Capacity - 1); 
      if (ok) 
      { 
       Console.WriteLine("\n Volume Information of " + drives + "\n"); 
       Console.WriteLine("\nSerialNumber of is..... " + serialNum.ToString() + " \n"); 
       if (volumename != null) 
       { 
        Console.WriteLine("VolumeName is..... " + volumename.ToString() + " \n"); 
       } 
       if (fstype != null) 
       { 
        Console.WriteLine("FileType is..... " + fstype.ToString() + " \n"); 
       } 
      } 
      ok = false; 
     } 

我想这应该是你一个完整的答案。

+1

有没有办法知道设备的真实名称? - Shira(G:) - (我的DOK),不只是G:? – Shira 2010-12-14 13:31:14

+0

我在这里编辑了我的答案。请检查一下。 – JCTLK 2010-12-15 03:40:33

2
DriveInfo[] mydrives = DriveInfo.GetDrives(); 

foreach (DriveInfo mydrive in mydrives) 
{ 
    Console.WriteLine("Drive: {0}", mydrive.Name); 
    Console.WriteLine("Type: {0}", mydrive.DriveType); 
} 

此代码将遍历每个驱动器,您将看到您的USB驱动器将出现。 DriveType将显示为Removable而不是USB,只是为了让您知道。

有关DriveType的更多信息。

+2

驱动器将显示为“可移动”,但它不会说哪些是USB。 – Gabe 2010-12-14 09:11:41

+0

这段代码向我展示了所有的USB设备和它们的名字 - 但是我能知道其中之一是否为DOK? – Shira 2010-12-14 09:51:29

0

或者你也可以做这样的事情(在我的例子,我更新驱动器列表到组合框):

drives = DriveInfo.GetDrives().Where(drive => drive.IsReady && drive.DriveType == DriveType.Removable).ToArray(); 

     if (drives.Length == 0) 
     { 
      drivesBox.Items.Add("No USB Stick found."); 
      formatButton.Enabled = false; 
     } 
     else 
     { 
      foreach (DriveInfo drive in drives) 
      { 
       drivesBox.Items.Add(drive.VolumeLabel + " (" + drive.Name + ")"); 
      } 
      formatButton.Enabled = true; 
     }