2010-12-14 12 views

答えて

2

Ardmanの答えのための親指。完璧。 少し変更を加えるには、ドライブのタイプを見つけるための変更を加えたいと思います。それはあなたの問題に対応する必要があります。

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

+0

ここで私の答えを編集しました。これをチェックしてください。 – JCTLK

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

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

このコードは各ドライブをループし、USBドライブが表示されます。 DriveTypeRemovableと表示され、USBではなく、表示されます。

さらに詳しい情報はDriveTypeです。

+2

ドライブは、「リムーバブル」として表示されますが、それは言わないであろうものUSBです。 – Gabe

+0

このコードは私にすべてのUSBデバイスとその名前を示していますが、そのうちの1つがDOKです。 – Shira

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; 
     } 
関連する問題