2010-12-14 32 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; 
     }